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

问题描述

java.io.RandomAccessFile 中,当方法 writeChar() 用于将循环中的字符数组写入文本文件作为

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

txtfile.writeUTF("hello");

它给出的结果是前面有一个空格,当在 NotePad++ 中打开时它显示

[ENQ]hello

在这种情况下,我如何在没有空格(如 [NUL] 或 [ENQ] )的情况下写入或附加普通行到文件中?

请发布答案如何在 Java 中的 RandomAccessFile 中将任何字符串写入文件

谢谢提前!

解决方法

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

查看 RandomAccessFile 类的文档:

writeChar(int v)

  • 将一个字符作为两字节值写入文件,高字节在前。

writeByte(int v)

  • 将一个字节作为一字节值写入文件。

writeBytes(String s)

  • 将字符串作为字节序列写入文件。

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

如果您只想将文本写入文件,最好使用 FileWriterOutputStreamWriter 类来执行此操作。这些类编写考虑到字符编码的文本。前者假定默认字符编码。后者允许您指定希望类在写入文件之前使用的字符编码将文本转换为字节。