RandomAccessFile writechar 方法写 NUL 到文件和 writeUTF 写 ENQ ,如何摆脱那些?

RandomAccessFile writechar method writing NULto file and writeUTF writing ENQ , how to get ridoff those?

java.io.RandomAccessFile中,当使用方法writeChar()循环写入一个char数组到一个文本文件

RandomAccessFile txtfile = new RandomAccessFile("Hello.txt","rw");
char c[] = {'S','i','g','n','e','d'};
for(char k:c) txtfile.writeChar(k);

Hello.txt 中给出结果,就像在普通记事本中打开时一样

 S i g n e d 

但是,当用文本编辑器 NotePad++ 打开时,Hello.txt 显示为

 [NUL]S[NUL]i[NUL]g[NUL]n[NUL]e[NUL]d  

当我使用 writeUTF() 方法将字符串写入 Hello.txt as

txtfile.writeUTF("hello");

它给出的结果是前面的空白 space,当在 NotePad++ 中打开时它显示为

[ENQ]hello

如何在没有空格(如 [NUL] 或 [ENQ] )的情况下编写或附加普通行到文件,如本例所示?

请post回答如何在Java!

中将任何字符串写入RandomAccessFile中的文件

提前致谢

Java中的char值是两个字节。 RandomAccessFile 表示读写二进制数据。它不进行任何文本转换。当被要求写入一个字符时,它只是将该字符在内存中的表示写入磁盘。

查看 RandomAccessFile class 的文档:

writeChar(int v)

  • Writes a char to the file as a two-byte value, high byte first.

writeByte(int v)

  • Writes a byte to the file as a one-byte value.

writeBytes(String s)

  • Writes the string to the file as a sequence of bytes.

因此使用 writeByte 而不是 writeChar 将字符作为单个 ASCII 字节写入文件,所有编辑器都应以相同的方式处理。 要在一次调用中将字符串作为单字节字符写入文件,请使用 writeBytes 方法,该方法接受一个字符串并将其作为单字节字符写入文件。

如果您只想将文本写入文件,最好使用 FileWriterOutputStreamWriter class 来完成。这些 classes 在编写文本时考虑了字符编码。前者采用默认字符编码。后者允许您指定希望 class 在写入文件之前将文本转换为字节的字符编码。