可以将apache FileUtils.writeLines()附加到文件(如果存在)

时间:2009-10-27 09:46:11

标签: java append apache-commons java-io

公地FileUtils看起来很酷,我无法相信它们无法附加到文件中。

File file = new File(path);
FileUtils.writeLines(file, printStats(new DateTime(), headerRequired));

上面只是替换了每次文件的内容,我只想继续标记这些东西,就像这段代码一样。

fw = new FileWriter(file, true);
try{
    for(String line : printStats(new DateTime(), headerRequired)){
        fw.write(line + "\n");
    }
}
finally{ 
    fw.close();
}

我搜索过javadoc但却一无所获!我错过了什么?

5 个答案:

答案 0 :(得分:7)

您可以使用IOUtils.writeLines(),它会收到一个Writer对象,您可以在第二个示例中初始化它。

答案 1 :(得分:5)

它们现在是FileUtils类中的appendString(...)方法。

但您可以从 FileUtils.openOutputStream(...)获取Outputstream,然后使用

写入它
write(byte[] b, int off, int len) 

您可以将关闭计算,以便您将支持该文件。

修改

在阅读Davids回答后,我认识到BufferedWriter将为您完成这项工作

BufferedWriter output = new BufferedWriter(new FileWriter(simFile));
output.append(text);

答案 2 :(得分:1)

从apache FileUtils 2.1开始,你有这个方法:

static void write(文件文件,CharSequence数据,布尔附加)

答案 3 :(得分:1)

FileUtils.writelines()有一个重载,它接受是否附加的参数。

public static void writeLines(File file,
          Collection<?> lines,
          boolean append)
                   throws IOException

file - 要写入的文件

lines - 要写入的行,null条目产生空行

append - 如果为true,那么这些行将被添加到文件的末尾而不是覆盖

情况1:

FileUtils.writeLine(file_to_write, "line 1");
FileUtils.writeLine(file_to_write, "line 2");

file_to_write仅包含

line 2

首次写入同一文件时,会多次覆盖该文件。

情况2:

FileUtils.writeLine(file_to_write, "line 1");
FileUtils.writeLine(file_to_write, "line 2", true);

file_to_write将包含

line 1
line 2

第二个电话会追加到同一个档案。

从java官方文档中查看此内容以获取更多详细信息。 https://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html#writeLines(java.io.File,java.util.Collection,boolean)

答案 4 :(得分:0)

你可以做点什么

List x = FileUtils.readLines(file);
x.add(String)
FileUtils.writelines(file,x);