问题描述
在 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
方法,该方法采用字符串并将其作为单字节字符写入文件。
如果您只想将文本写入文件,最好使用 FileWriter
或 OutputStreamWriter
类来执行此操作。这些类编写考虑到字符编码的文本。前者假定默认字符编码。后者允许您指定希望类在写入文件之前使用的字符编码将文本转换为字节。