为什么要关注代码
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”的文件,没有额外的东西。
答案 0 :(得分:3)
来自DataOutputStream.writeUTF()的Javadoc:
首先,将两个字节写入输出流,就好像通过 writeShort方法给出要遵循的字节数。这个值是 实际写出的字节数,而不是长度 串。在长度之后,输出字符串的每个字符, 按顺序,使用修改后的UTF-8编码作为字符。 [...]
所以它不是2个字符,而只是2个字节。
DataOutputStream的目的是:
数据输出流允许应用程序编写原始Java数据 以便携方式输出流的类型。然后,应用程序可以使用数据输入流来重新读取数据。
另请注意,建议使用NIO2 API和自动资源管理。并且不要用String包装String。在写入文件系统时,还要为流使用缓冲区。
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);
}