#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
}