Может apache FileUtils.writeLines() либо добавить в файл, если он существует

общие пакета 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 ответов


можно использовать IOUtils.writeLines(), он получает объект Writer, который вы можете инициализировать, как во втором примере.


их теперь метод, как appendString(...) в классе FileUtils.

но вы можете получить Outputstream от пакета fileutils.openOutputStream(...) и чем написать его с помощью

write(byte[] b, int off, int len) 

вы можете вычислить off, так что вы будете apend к файлу.

редактировать

после прочтения ответа Davids я понял, что BufferedWriter сделает эту работу за вас

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

начиная с Apache FileUtils 2.1 у вас есть этот метод:

статическая запись void (файл файла, данные CharSequence, логическое добавление)


существует перегрузка для FileUtils.writelines (), который принимает параметр для добавления.

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

file-файл для записи в

строки-строки для записи, нулевые записи создают пустые строки

append - если true, то строки будут добавляться в конец файла, а не перезаписывать

Вопрос 1:

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

file_to_write будет содержать только

line 2

как первая запись в один и тот же файл несколько times перезапишет файл.

Вопрос 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.утиль.Коллекция, boolean)


вы могли бы сделать что-то вроде

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