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

StackOverflow https://stackoverflow.com/questions/1629713

Вопрос

Общее достояние 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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top