try { Files.write(Paths.get("myfile.txt"), "the text".getBytes(), StandardOpenOption.APPEND); }catch (IOException e) { //exception handling left as an exercise for the reader }
Осторожно: описанный выше подход выдастNoSuchFileException, если файл еще не существует. Он также не добавляет новую строку автоматически (что часто требуется при добавлении в текстовый файл). Другой подход заключается в передаче обоих параметров CREATE и APPEND, которые сначала создадут файл, если он еще не существует:
Однако, если вы будете выполнять запись в один и тот же файл много раз, приведенные выше фрагменты должны открывать и закрывать файл на диске много раз, что является медленной операцией. В этом случае a BufferedWriter выполняется быстрее.:
try(FileWriterfw=newFileWriter("myfile.txt", true); BufferedWriterbw=newBufferedWriter(fw); PrintWriterout=newPrintWriter(bw)) { out.println("the text"); //more code out.println("more text"); //more code } catch (IOException e) { //exception handling left as an exercise for the reader }
Примечания:
Второй параметр конструктора FileWriter укажет ему добавить к файлу, а не записывать новый файл. (Если файл не существует, он будет создан.)
Использование BufferedWriter рекомендуется для дорогостоящего разработчика (такого как FileWriter).
Использование a PrintWriter дает вам доступ к println синтаксису, к которому вы, вероятно, привыкли из System.out.
Но обертки BufferedWriter и PrintWriter не являются строго необходимыми.
Более старая Java
try { PrintWriterout=newPrintWriter(newBufferedWriter(newFileWriter("myfile.txt", true))); out.println("the text"); out.close(); } catch (IOException e) { //exception handling left as an exercise for the reader }
Обработка исключений
Если вам нужна надежная обработка исключений для старой Java, она становится очень подробной:
FileWriterfw=null; BufferedWriterbw=null; PrintWriterout=null; try { fw = newFileWriter("myfile.txt", true); bw = newBufferedWriter(fw); out = newPrintWriter(bw); out.println("the text"); out.close(); } catch (IOException e) { //exception handling left as an exercise for the reader } finally { try { if(out != null) out.close(); } catch (IOException e) { //exception handling left as an exercise for the reader } try { if(bw != null) bw.close(); } catch (IOException e) { //exception handling left as an exercise for the reader } try { if(fw != null) fw.close(); } catch (IOException e) { //exception handling left as an exercise for the reader } }
Ответ 2
Вы можете использовать fileWriter с флагом, установленным в true , для добавления.
try { String filename= "MyFile.txt"; FileWriterfw=newFileWriter(filename,true); //the true will append the new data fw.write("add a line\n");//appends the string to the file fw.close(); } catch(IOException ioe) { System.err.println("IOException: " + ioe.getMessage()); }
Ответ 3
Не должны ли все ответы здесь с блоками try / catch содержать фрагменты .close(), содержащиеся в блоке finally?
Также, начиная с Java 7, вы можете использовать инструкцию try-with-resources. Для закрытия объявленных ресурсов не требуется блок finally, поскольку он обрабатывается автоматически, а также является менее подробным: