Java PrintWriter文件覆盖

时间:2017-08-14 15:23:10

标签: java file io printwriter writer

我想用UTF-16写入一个文件,所以我使用PrintWriter(文件,“UTF-16”),但是它删除了文件中的所有内容,我可以使用FileWriter(file,true),但后来呢不会是UTF-16,并且显然没有PrintWriter的构造函数,如PrintWriter(Writer,Charset,boolean append);

我该怎么办?

3 个答案:

答案 0 :(得分:4)

FileWriter的JavaDoc说:

  

此类的构造函数假定默认字符编码和默认字节缓冲区大小是可接受的。要自己指定这些值,请在OutputStreamWriter上构建FileOutputStream

所以你可以这样做:

 Writer writer = new PrintWriter(
     new OutputStreamWriter(
           new FileOutputStream(filename, true),
           StandardCharsets.UTF16));

您可能还想在其中加入BufferedOutputStream以获得最高效率。

答案 1 :(得分:3)

OutputStreamWriter与UTF-16字符集一起使用,用append = true打开FileOutputStream。替代方案,请使用Files.newBufferedWriter

try (Writer writer = Files.newBufferedWriter(
        Paths.of("filename.txt"),
        StandardCharsets.UTF_16,
        StandardOpenOption.APPEND)) {
    ...
}

答案 2 :(得分:1)

您可以使用

来完成
new PrintWriter(new OutputStreamWriter(new FileOutputStream(file, true), "UTF-16"));