Файл проверки существует 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();
Это создаст файл, если он не существует или добавится к нему в противном случае.