проверить файл существует Java - PullRequest
3 голосов
/ 06 августа 2009

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

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

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

if(file.exists){

} else{
   new File();
}

Что мне делать?

Ответы [ 3 ]

12 голосов
/ 06 августа 2009

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

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

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

Цитирую комментарий Стивена:

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

10 голосов
/ 06 августа 2009

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

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

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

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

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

1 голос
/ 06 августа 2009

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

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

Это создаст файл, если он не существует, или добавит в конец его иначе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...