Можно ли заставить apache FileUtils.writeLines() добавлять к файлу, если он существует
-
06-07-2019 - |
Вопрос
Общее достояние 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, но ничего не нашел!Что я упускаю из виду?
Решение
Вы можете использовать IOUtils.writeLines () , он получает объект Writer, который можно инициализировать, как во втором примере.
Другие советы
Теперь это метод, подобный appendString(...) в классе FileUtils.
Но вы можете получить Outputstream из FileUtils.openOutputStream(...) и чем писать в него с помощью
write(byte[] b, int off, int len)
Вы можете рассчитать значение off, чтобы перейти к файлу.
Редактировать
Прочитав ответ Дэвидса, я понял, что BufferedWriter выполнит эту работу за вас
BufferedWriter output = new BufferedWriter(new FileWriter(simFile));
output.append(text);
Начиная с apache FileUtils 2.1 у вас есть этот метод:
статическая пустая запись (файл, данные 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
Поскольку первая запись в один и тот же файл несколько раз приведет к перезаписи файла.
Случай 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.Коллекция, логическое значение)
вы могли бы сделать что-то вроде
List x = FileUtils.readLines(file);
x.add(String)
FileUtils.writelines(file,x);