【问题标题】:RandomAccessFile writechar method writing NULto file and writeUTF writing ENQ , how to get ridoff those?RandomAccessFile writechar 方法写入 NULto 文件和 writeUTF 写入 ENQ ,如何摆脱这些?
【发布时间】:2020-12-20 18:14:15
【问题描述】:

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 作为

txtfile.writeUTF("hello");

结果显示为前面的空格,在 NotePad++ 中打开时显示为

[ENQ]hello

在这种情况下,我如何在没有空格的情况下写入或附加法线行(如 [NUL] 或 [ENQ] )?

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

谢谢提前!

【问题讨论】:

  • 您要使用哪种文件编码?如果使用 UTF-16 作为文件编码,您所描述的是所需的行为。
  • 是的,我知道了,我尝试用 UTF-16 格式写一个 UTF-8 字节!所以它在它写的每个字符前面都给出了一个 NUL!

标签: java file-handling java-io randomaccessfile


【解决方案1】:

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

查看RandomAccessFile 类的文档:

writeChar(int v)

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

writeByte(int v)

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

writeBytes(String s)

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

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

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

【讨论】:

    猜你喜欢
    • 2015-07-15
    • 2013-05-02
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    • 2017-01-25
    • 2012-09-15
    相关资源
    最近更新 更多