Можно ли сделать apache FileUtils.writeLines () для добавления в файл, если он существует - PullRequest
6 голосов
/ 27 октября 2009

Commons 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 ]

7 голосов
/ 27 октября 2009

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

5 голосов
/ 27 октября 2009

Их метод теперь похож на appendString (...) в классе FileUtils.

Но вы можете получить Outputstream из FileUtils.openOutputStream (...) и записать в него, используя

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

Вы можете рассчитать выключение, так что вы добавите файл.

EDIT

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

BufferedWriter output = new BufferedWriter(new FileWriter(simFile));
output.append(text);
1 голос
/ 02 февраля 2016

Существует перегрузка для 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.Collection, boolean)

1 голос
/ 28 декабря 2011

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

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

0 голосов
/ 25 февраля 2011

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

List x = FileUtils.readLines(file);
x.add(String)
FileUtils.writelines(file,x);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...