如何在Java中将附加选项和StandardCharsets / Encoding设置为BufferedWriter?

时间:2019-01-15 13:28:11

标签: java file filewriter

我是Java编程的新手,正在寻找用Java编写和附加文件内容的选项。

以下C#选项的类似选项。

File.WriteAllText(string path, string contents, Encoding encoding);
File.AppendAllText(string path, string contents, Encoding encoding);

我虽然使用BufferedWriter,但它可以选择为FileWriter传递true / false(字符串路径,布尔值追加),但是我没有提供编码的选项。

try (FileWriter fw = new FileWriter(path, false);
    BufferedWriter bw = new BufferedWriter(fw)) {
    bw.write("appending text into file");
}

如果我使用Files.newBufferedWriter初始化BufferedWriter,则可以提供StandardCharsets,但如果有现有文件,则没有附加选项。

try (BufferedWriter bw = Files.newBufferedWriter(Paths.get(path), StandardCharsets.UTF_8)) {
    bw.write("test");
    bw.append("append test");
}

是否可以同时定义两个选项(附加选项和StandardCharsets)?

2 个答案:

答案 0 :(得分:1)

是的。如果您查看Files类的实现,则有如下方法:

public static BufferedWriter newBufferedWriter(Path path, Charset cs, OpenOption... options)

因此您可以调用

之类的方法
BufferedWriter bw = Files.newBufferedWriter(Paths.get(path), StandardCharsets.UTF_8, 
                    StandardOpenOption.CREATE, StandardOpenOption.APPEND)

如果使用像Intellij这样的IDE,它会建议您允许使用哪些公共方法。

答案 1 :(得分:0)

您可以尝试java.nio以便将内容追加到现有文件中(如果您使用的是Java 7或更高版本),也许可以执行以下操作:

List<String> newContent = getNewContent(...); // Here you get the lines you want to add
Files.write(myFile, newContent, UTF_8, APPEND, CREATE);

导入需要通过以下方式完成:

java.nio.charset.StandardCharsets.UTF_8, java.nio.file.StandardOpenOption.APPEND, java.nio.file.StandardOpenOption.CREATE

或者您可以尝试使用Guava

File myFile = new File("/Users/home/dev/log.txt");
String newContent = "This is new content";
Files.append(newContent, myFile, Charsets.UTF_8);