Повторная запись данных в файл

#java #filereader #read-write

#java #программа чтения файлов #чтение-запись

Вопрос:

Я должен повторно читать файл и записывать данные. Я подумал о двух методах:-

Способ #1

 while(readLine ...) {
    // open the file to write 
    br.write("something);    //write to file
    br.close();
    // close the file
}
  

Способ №2

 // open the file to write
while(readLine...)
    br.write("something");
}
br.close();
  

Должен ли я открывать и закрывать файл каждый раз или открывать его один раз в начале программы и закрывать файл в конце после применения всей бизнес-логики. Какой из них является лучшим подходом? У кого-нибудь есть какой-то недостаток?

Комментарии:

1. Как правило, если вы повторно читаете из одного файла для записи в другой файл, вам следует сохранить файл, который вы исправляете, чтобы открыть для записи, пока запись не будет завершена. Я бы также посоветовал вам использовать BufferedWriter / BufferedOutputStream, если вы собираетесь выполнять несколько операций записи

Ответ №1:

Используйте метод # 2.

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

Итак, используйте метод № 2: откройте файл (возможно, в режиме добавления, возможно, нет, в зависимости от ваших потребностей), напишите все, что собираетесь написать, закройте файл, ГОТОВО.

Ответ №2:

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

 try{
    // open the file stream
    // perform your logic
}
catch(IOException ex){
  // exception handling
}
finally{
   // close the stream here in finally block
}
  

Вы можете использовать try с ресурсами, где вам не нужно писать finally block. Потоки, открытые в блоке try, будут автоматически закрыты.

 try(BufferedReader br = new BuffredReader(...)/*add writer here as well*/){
    // perform your logic here
}
catch(IOException ex){
   // exception handling
}