我想用UTF-16,所以我使用的PrintWriter(文件,“UTF-16”)写入到一个文件,但随后它在文件中删除了一切,我可以使用的FileWriter(文件,真) ,但随后就不会在UTF-16,和所以显然是不适合的PrintWriter构造等的PrintWriter(作家,字符集,布尔追加);的Java PrintWriter的文件覆盖
我该怎么办?
我想用UTF-16,所以我使用的PrintWriter(文件,“UTF-16”)写入到一个文件,但随后它在文件中删除了一切,我可以使用的FileWriter(文件,真) ,但随后就不会在UTF-16,和所以显然是不适合的PrintWriter构造等的PrintWriter(作家,字符集,布尔追加);的Java PrintWriter的文件覆盖
我该怎么办?
为FileWriter
的JavaDoc的说:
这个类的构造方法假定默认字符编码和默认的字节缓冲区大小是可接受的。要自己指定这些值,在
FileOutputStream
构建OutputStreamWriter
。
所以,你可以这样做:
Writer writer = new PrintWriter(
new OutputStreamWriter(
new FileOutputStream(filename, true),
StandardCharsets.UTF16));
您可能要包括在BufferedOutputStream
有太多的最大效率。
使用带有UTF-16字符集的OutputStreamWriter
,用append = true打开一个打开的FileOutputStream
。替代方案,使用Files.newBufferedWriter
:
try (Writer writer = Files.newBufferedWriter(
Paths.of("filename.txt"),
StandardCharsets.UTF_16,
StandardOpenOption.APPEND)) {
...
}
你可以做到这一点通过使用
new PrintWriter(new OutputStreamWriter(new FileOutputStream(file, true), "UTF-16"));
你可以在阅读的一切首先,更新数据,然后将其改写为“新”文件? –
@tima:这不是一个重复,据我所看到的。那里没有处理附加*和*指定编码。 –
@KenReid追加到一个文件就是想做一个相当主流的东西。永远不需要锉一个文件,然后从头开始重写。这通常是低效的。在某些情况下,文件不适合内存。 – slim