Файл проверки существует java

Я хочу создать текстовый файл, но если файл уже существует, он не должен создавать новый файл, но должен добавить текст к контенту (в конце) существующего файла. Как я могу сделать это на Java?

за каждую секунду я читаю данные из входного потока, когда перестаю читать, и снова я начинаю читать данные в это время, я должен писать в тот же файл, если файл уже существует

Нужно ли проверять условие:

if(file.exists){

} else{
   new File();
}

Что я должен делать?

Ответ 1

Вы можете использовать следующий код для добавления к файлу, который уже существует -

try {
    BufferedWriter out = new BufferedWriter(new FileWriter("filename", true));
    out.write("data");
    out.close();
} catch (IOException e) { }

Если второй аргумент в конструкторе FileWriter равен true, тогда байты будут записываться в конец файла, а не в начало.

Цитата: Комментарий Стивена:

... прохождение true в качестве второго аргумент вызывает создание файла если он не существует и не открывается для добавления, если он существует.

Ответ 2

Нужно ли проверять условие if(file.exists){ }else{ new File(); }

Нет, вам не нужно это делать: см. другие ответы для решения.

Фактически, это была бы плохая идея, чтобы сделать что-то подобное, поскольку она создает потенциальное состояние гонки, которое может заставить ваше приложение иногда умирать... или clobber файл!

Предположим, что операционная система выгрузила ваше приложение сразу после вызова file.exists(), которое возвращает false, и передало управление другому приложению. Тогда предположим, что другое приложение создало файл. Теперь, когда ваше приложение будет возобновлено операционной системой, он не поймет, что файл создан, и попытайтесь создать его самостоятельно. В зависимости от обстоятельств, это может скрыть существующий файл, или это может привести к тому, что это приложение выкинет IOException из-за конфликта блокировки файлов.

Кстати, new File() фактически не создает никаких объектов файловой системы. Это происходит только тогда, когда вы открываете файл; например вызывая new FileOutputStream(file);

Ответ 3

Если вы хотите добавить к файлу, если он уже существует, нет необходимости проверять его существование вообще с помощью exists(). Вам просто нужно создать FileWriter с флагом append, установленным в true; например.

PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("foo.txt", true)));
pw.println("Hello, World");
pw.close();

Это создаст файл, если он не существует или добавится к нему в противном случае.