我想用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