Java 为什么FileOutputStream在文件开头添加null和传输结束字符?

Java 为什么FileOutputStream在文件开头添加null和传输结束字符?,java,file-io,Java,File Io,为什么要使用下面的代码 import java.io.DataOutputStream; import java.io.FileOutputStream; import java.io.IOException; public class Test { public static void main(String[] args) throws IOException { DataOutputStream out = new DataOutputStream( new F

为什么要使用下面的代码

import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test {
    public static void main(String[] args) throws IOException {
         DataOutputStream out = new DataOutputStream( new FileOutputStream("plik.txt")); 
         String test = new String("test");
         out.writeUTF(test);
         out.close(); 
    }

}

在文件开头生成带有“null”和eot字符的文件,后跟“test”?我希望它只生成带有“test”的文件,而不包含其他内容。

来自DataOutputStream.writeUTF()的Javadoc:

首先,将两个字节写入输出流,就像 writeShort方法,提供要跟随的字节数。此值为 实际写入的字节数,而不是 一串在长度之后,输出字符串的每个字符, 按顺序,对字符使用修改的UTF-8编码。 [……]

所以不是2个字符,而是2个字节

DataOutputStream的用途是:

数据输出流允许应用程序编写基本Java数据 以可移植的方式将类型转换为输出流。然后,应用程序可以使用数据输入流将数据读回

另外请注意,建议使用NIO2 API和自动资源管理。不要用绳子把绳子包起来。在写入文件系统时,还要为流使用缓冲区

try (DataOutputStream out = new DataOutputStream(new BufferedOutputStream(Files.newOutputStream(Paths.get("plik.txt")))){ 
         String test = "test";
         out.writeUTF(test);
}
如果您只想在UTF-8中向文件写入一些文本,请使用以下代码:

try (PrintWriter pw = new PrintWriter(Files.newBufferedWriter(Paths.get("plik.txt"), Charset.forName("UTF-8"))){ 
         String test = "test";
         pw.print(test);
}

“Automatic”应该是“Automatic”(我不允许编辑这篇文章,因为这将更改少于6个字符)@Bulwersator谢谢,修复了它!第二个版本不起作用-“BufferedWriter类型的writeUTF(String)方法未定义”@Bulwersator是的,我很快保存到。例如,你可以使用打印机,但它不能。DataOutputStream.writeUTF()没有。请参阅Javadoc。