Как добавить данные в существующий файл .txt с помощью java fxml / scene builder [duplicate]

Если у вас есть ресурсы, вы можете пожертвовать памятью, чтобы улучшить скорость:

static const unsigned bitPositions[MAX_INT] = { 0, 0, 1, 0, 2, /* ... */ }; unsigned GetLowestBitPos(unsigned value) { assert(value != 0); // handled separately return bitPositions[value]; }

Если Эта таблица будет потреблять не менее 4 ГБ (16 ГБ, если мы оставляем возвращаемый тип как unsigned).

Если ваша функция должна оставаться переносной и работать как можно быстрее любой ценой, это будет путь , В большинстве реальных приложений таблица 4 ГБ нереальна.

587
задан Jonik 6 November 2009 в 16:50
поделиться

29 ответов

671
ответ дан Kip 15 August 2018 в 21:36
поделиться

Вы также можете попробовать следующее:

  JFileChooser c = new JFileChooser ();  c.showOpenDialog (с);  Файл write_file = c.getSelectedFile ();  String Content = "Запись в файл";  // то, что вы хотели бы добавить в файл try {RandomAccessFile raf = new RandomAccessFile (write_file, "rw");  long length = raf.length ();  //System.out.println(length);  raf.setLength (длина + 1);  // + (целочисленное значение) для расстояния raf.seek (raf.length ());  raf.writeBytes (содержание);  raf.close ();  } catch (Исключение e) {// любой метод обработки исключений для выбора ur}  
2
ответ дан aashima 15 August 2018 в 21:36
поделиться

Library

  import java.io.BufferedWriter;  import java.io.File;  импортировать java.io.FileWriter;  import java.io.IOException;   

Код

  public void append () {try {String path = "D: /sample.txt";  Файл file = новый файл (путь);  FileWriter fileWriter = новый FileWriter (файл, true);  BufferedWriter bufferFileWriter = new BufferedWriter (fileWriter);  fileWriter.append («Пример текста в файле для добавления»);  bufferFileWriter.close ();  System.out.println («Регистрация пользователя завершена»);  } catch (Exception ex) {System.out.println (ex);  }}  
2
ответ дан absiddiqueLive 15 August 2018 в 21:36
поделиться
  FileOutputStream fos = new FileOutputStream ("File_Name", true);  fos.write (данные);   

true позволяет добавлять данные в существующий файл. Если мы напишем

  FileOutputStream fos = new FileOutputStream («File_Name»);   

Он перезапишет существующий файл. Итак, идите для первого подхода.

4
ответ дан ahajib 15 August 2018 в 21:36
поделиться
  • 1
    – Bhaskara Arani 12 October 2016 в 10:33
  • 2
    @BhaskaraArani Это всего лишь строка, он привел пример объекта JSON, преобразованного в строку, но идея в том, что это может быть любая строка. – Gherbi Hicham 23 October 2016 в 09:42

Этот код заполнит вашу потребность:

  FileWriter fw = new FileWriter («C: \\ file.json», true);  fw.write ( "SSSSSS");  fw.close ();   
2
ответ дан APC 15 August 2018 в 21:36
поделиться

Вы можете использовать код follong для добавления содержимого в файл:

  String fileName = "/ home / shriram / Desktop / Images /" + "test.txt";  FileWriter fw = new FileWriter (имя_файла, true);  fw.write («здесь вы будете вставлять содержимое или добавлять в файл»);  fw.close ();  FileWriter fw1 = new FileWriter (имя_файла, true);  fw1.write («другое содержимое будет добавлено в тот же файл»);  fw1.close ();   
0
ответ дан BartoszKP 15 August 2018 в 21:36
поделиться
  Строка str;  String path = "C: / Users / ... путь .... / iin.txt";  // вы можете ввести также .. я создал этот путь: P BufferedReader br = новый BufferedReader (новый InputStreamReader (System.in));  PrintWriter pw = новый PrintWriter (новый FileWriter (путь, истина));  try {while (true) {System.out.println ("Введите текст:");  str = br.readLine ();  if (str.equalsIgnoreCase («exit»)) break;  else pw.println (str);  }} catch (Исключение e) {// oh noes!  } наконец {pw.close ();  }  

это сделает то, что вы намереваетесь ..

3
ответ дан Benjamin Varghese 15 August 2018 в 21:36
поделиться
1
ответ дан BullyWiiPlaza 15 August 2018 в 21:36
поделиться

Убедитесь, что поток закрыт во всех сценариях.

Это немного тревожно, как многие из этих ответов оставляют дескриптор файла открытым в случае ошибки. Ответ https://stackoverflow.com/a/15053443/2498188 на деньги, но только потому, что BufferedWriter () не может выбраться. Если бы это было возможно, исключение оставило бы объект FileWriter открытым.

Более общий способ сделать это, который не заботится о том, может ли BufferedWriter () :

  PrintWriter out = null;  BufferedWriter bw = null;  FileWriter fw = null;  try {fw = new FileWriter ("outfilename", true);  bw = new BufferedWriter (fw);  out = новый PrintWriter (bw);  out.println ("текст");  } catch (IOException e) {// Запись / открытие файла на каком-то этапе.  } finally {try {if (out! = null) {out.close ();  // Закрывает bw и fw too} else if (bw! = Null) {bw.close ();  // Закрывает fw too} else if (fw! = Null) {fw.close ();  } else {// О, мальчик, это сильно сработало!  : 3}} catch (IOException e) {// Закрытие файлов с ошибками для некоторой неясной причины}}  

Редактировать:

Начиная с Java 7 рекомендуется путь - использовать «попробовать с ресурсами» и позволить JVM справиться с ним:

  try (FileWriter fw = new FileWriter («outfilename», true); BufferedWriter bw = new BufferedWriter (fw)  ; PrintWriter out = new PrintWriter (bw)) {out.println ("текст");  } catch (IOException e) {// Запись / открытие файла на каком-то этапе.  }  
19
ответ дан Community 15 August 2018 в 21:36
поделиться
  • 1
    +1 для правильной ARM с Java 7. Вот хороший вопрос об этой сложной теме: stackoverflow.com/questions/12552863/… . – Vadzim 16 June 2015 в 15:34
  • 2
    Хм, по какой-то причине PrintWriter.close () не объявлен как выбрасывает IOException в docs . Если посмотреть на источник , метод close () , действительно, не может выбрасывать IOException , потому что он улавливает его из базового потока и устанавливает флаг. Поэтому, если вы работаете над кодом для следующего космического челнока или системы измерения доз рентгеновских лучей, вы должны использовать PrintWriter.checkError () после попытки out.close () [ ! d7]. Это должно быть действительно документировано. – Evgeni Sergeev 14 November 2015 в 08:02
  • 3
6
ответ дан dantuch 15 August 2018 в 21:36
поделиться
  import java.io.BufferedWriter;  импортировать java.io.FileWriter;  import java.io.IOException;  import java.io.PrintWriter;  public class Writer {public static void main (String args []) {doWrite ("output.txt", "Содержимое для добавления в файл");  } public static void doWrite (String filePath, String contentToBeAppended) {try (FileWriter fw = new FileWriter (filePath, true); BufferedWriter bw = new BufferedWriter (fw); PrintWriter out = new PrintWriter (bw)) {out.println (contentToBeAppended  );  } catch (IOException e) {// Запись / открытие файла на каком-то этапе.  }}}  
2
ответ дан David Charles 15 August 2018 в 21:36
поделиться
  • 1
    Вышеприведенное является просто быстрой реализацией представленного решения . По этой ссылке . Таким образом, вы можете скопировать и запустить код и сразу увидеть, как он работает, убедитесь, что файл output.out находится в том же каталоге, что и файл Writer.java – David Charles 15 February 2017 в 16:02

Вы можете использовать fileWriter с флагом, установленным на true , для добавления.

  try {String filename = "MyFile.txt  «;  FileWriter fw = new FileWriter (имя файла, true);  // true добавит новые данные fw.write ("add a line \n"); // добавляет строку в файл fw.close ();  } catch (IOException ioe) {System.err.println ("IOException:" + ioe.getMessage ());  }  
151
ответ дан eRaisedToX 15 August 2018 в 21:36
поделиться
  • 1
    close следует поместить в блок finally так же, как показано в ответе @ etech в случае, если исключение будет создано между созданием FileWriter и вызовом close. – Pshemo 13 March 2015 в 22:19
  • 2
    Хороший ответ, хотя лучше использовать System.getProperty («line.separator») для новой строки, а не «\n». – Henry Zhu 13 July 2015 в 07:34
  • 3
    @Decoded. Я отменил ваше изменение в этом ответе, поскольку он не компилируется. – Kip 31 March 2016 в 12:15
  • 4
    @Kip, в чем проблема? Я должен был ввести «опечатку». – Decoded 17 August 2016 в 19:53
  • 5
    @Decoded у вас fw.close () в блоке finally, без вложенного try / catch ( .close () может вызывать IOException ) – Kip 17 August 2016 в 19:59
64
ответ дан etech 15 August 2018 в 21:36
поделиться

Это можно сделать в одной строке кода. Надеюсь, это поможет:)

  Files.write (Paths.get (имя_файла), msg.getBytes (), StandardOpenOption.APPEND);   
6
ответ дан FlintOff 15 August 2018 в 21:36
поделиться
  • 1
    его может быть недостаточно :) Лучшая версия - File.write (Paths.get (имя_файла), msg.getBytes (), StandardOpenOption.APPEND, StandardOpenOption.CREATE); – evg345 2 February 2018 в 09:28

Использование java.nio. Файлы вместе с java.nio.file. StandardOpenOption

  PrintWriter out = null;  BufferedWriter bufWriter;  try {bufWriter = Files.newBufferedWriter (Paths.get («log.txt»), Charset.forName («UTF8»), StandardOpenOption.WRITE, StandardOpenOption.APPEND, StandardOpenOption.CREATE);  out = new PrintWriter (bufWriter, true);  } catch (IOException e) {// О, нет!  Не удалось создать PrintWriter} // После успешного создания PrintWriter out.println («Текст будет добавлен»);  // После написания, не забудьте закрыть!  out.close ();   

Это создает BufferedWriter , используя Files, который принимает параметры StandardOpenOption и автозапуска PrintWriter из результирующего BufferedWriter . Метод PrintWriter println () может быть вызван для записи в файл.

Используемые параметры StandardOpenOption в этом коде: открывает файл для записи, только добавляет к файлу и создает файл, если он не существует.

Paths.get («путь здесь») может заменить на новый файл («путь здесь»). toPath () . И Charset.forName («charset name») можно изменить, чтобы разместить желаемую Charset .

4
ответ дан icasdri 15 August 2018 в 21:36
поделиться

Если мы используем Java 7 и выше, а также знаем, какой контент будет добавлен (добавлен) в файл, мы можем использовать метод newBufferedWriter в пакете NIO.

   public static void main (String [] args) {Путь FILE_PATH = Paths.get ("C: / temp", "temp.txt");  String text = "\n Добро пожаловать в Java 8";  // Запись в файл temp.txt try (BufferedWriter writer = Files.newBufferedWriter (FILE_PATH, StandardCharsets.UTF_8, StandardOpenOption.APPEND)) {writer.write (текст);  } catch (IOException e) {e.printStackTrace ();  }}  

Следует отметить несколько замечаний:

  1. Всегда хорошая привычка указывать кодировку кодировки и для этого мы имеем константу в классе ] StandardCharsets .
  2. В коде используется команда try-with-resource , в которой ресурсы автоматически закрываются после попытки.

] Хотя OP не спросил, но на всякий случай мы хотим искать строки с определенным ключевым словом, например privacy мы можем использовать потоковые API в Java:

  // Чтение из файла первой строки, содержащей слово «конфиденциальный», try {Stream & lt; String & gt;  lines = Files.lines (FILE_PATH);  Дополнительно & Lt; & Строка GT;  containsJava = lines.filter (l- & gt; l.contains («конфиденциально»)) findFirst ();  if (содержитJava.isPresent ()) {System.out.println (содержитJava.get ());  }} catch (IOException e) {e.printStackTrace ();  }  
3
ответ дан i_am_zero 15 August 2018 в 21:36
поделиться
  • 1
    оговорка: при использовании BufferedWriter write (String string) , если вы ожидаете новую строку после каждой строки, написанной, следует называть newLine () – yongtw123 26 June 2015 в 10:20

java 7 +

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

  String sampleText = "test" + System.getProperty ("line.separator");  Files.write (Paths.get (filePath), sampleText.getBytes (StandardCharsets.UTF_8), StandardOpenOption.CREATE, StandardOpenOption.APPEND);   

Если файл не существует, он создает его, и если он уже существует, он добавляет sampleText к существующему файлу. Используя это, вы избавляетесь от добавления ненужных библиотек в ваш путь к классам.

6
ответ дан Lefteris Bab 15 August 2018 в 21:36
поделиться

Если вы хотите ДОБАВИТЬ НЕКОТОРЫЙ ТЕКСТ В КОНКРЕТНЫХ ЛИНИЯХ, вы можете сначала прочитать весь файл, добавить текст туда, где хотите, а затем перезаписать все, как в приведенном ниже коде:

  public static  void addDatatoFile (String data1, String data2) {String fullPath = "/home/user/dir/file.csv";  Файл dir = новый файл (fullPath);  Список & л; Строка & GT;  l = новый LinkedList & lt; String & gt; ();  try (BufferedReader br = new BufferedReader (новый FileReader (dir))) {Строка;  int count = 0;  while ((line = br.readLine ())! = null) {if (count == 1) {// добавить данные в конце второй строки строки = = data1;  } else if (count == 2) {// добавить другие данные в конце третьей строки + = data2;  } l.add (строка);  подсчитывать ++;  } br.close ();  } catch (FileNotFoundException e) {e.printStackTrace ();  } catch (IOException e) {e.printStackTrace ();  } createFileFromList (l, dir);  } public static void createFileFromList (List & lt; String & gt; list, File f) {PrintWriter writer;  try {writer = new PrintWriter (f, "UTF-8");  for (String d: list) {writer.println (d.toString ());  } writer.close ();  } catch (FileNotFoundException | UnsupportedEncodingException e) {e.printStackTrace ();  }}  
1
ответ дан lfvv 15 August 2018 в 21:36
поделиться
[D1] / ******************************************* *************************** * он будет записывать содержимое в указанный файл * * @param keyString * @throws IOException ***** ************************************************** ************** / public static void writeToFile (String keyString, String textFilePAth) throws IOException {// Для вывода в файл Файл a = новый файл (textFilePAth); if (! a.exists ()) {a.createNewFile (); } FileWriter fw = new FileWriter (a.getAbsoluteFile (), true); BufferedWriter bw = новый BufferedWriter (fw); bw.append (KeyString); bw.newLine (); bw.close (); } // конец writeToFile ()
0
ответ дан Mihir Patel 15 August 2018 в 21:36
поделиться

Лучше использовать try-with-resources, а затем все, что pre-java 7 finally business

  static void appendStringToFile (файл пути, строка) бросает IOException {try (BufferedWriter out = Files.  newBufferedWriter (файл, StandardCharsets.UTF_8, StandardOpenOption.APPEND)) {out.append (s);  out.newLine ();  }}  
2
ответ дан mikeyreilly 15 August 2018 в 21:36
поделиться

Создайте функцию в любом месте вашего проекта и просто вызовите эту функцию, когда она вам понадобится.

Ребята, вы должны помнить, что вы, ребята, вызываете активные потоки, которые вы не вызываете асинхронно, и поскольку это вероятно, будет хорошим от 5 до 10 страниц, чтобы сделать это правильно. Почему бы не потратить больше времени на ваш проект и забыть о написании написанного. Правильно

  // Добавление статического модификатора сделало бы это доступным в любом месте вашего приложения публичным Logger getLogger () {return java.util.logging.Logger.getLogger («MyLogFileName»);  } // вызываем метод в любом месте и добавляем то, что вы хотите регистрировать // класс Logger позаботится о том, чтобы поставить для вас отметки времени // плюс те, которые выполнены так же, как и больше, процессорная мощность войдет в ваше приложение // изнутри  тело функции в том же классе ... {... getLogger (). log (Level.INFO, «текст, который вы хотите добавить»);  ...} ... / ********* файл журнала находится в файлах корневого файла сервера ******** /  

три строки кода два действительно, поскольку третий фактически добавляет текст. :

P
2
ответ дан Netcfmx 15 August 2018 в 21:36
поделиться

Изменить - с Apache Commons 2.1 правильный способ сделать это:

  FileUtils.writeStringToFile (файл, «String to append», true);   

Я адаптировал решение @ Kip, чтобы включить правильное закрытие файла, наконец: public static void appendToFile (String targetFile, String s) throws IOException {appendToFile (новый файл (targetFile), с); } public static void appendToFile (File targetFile, String s) throws IOException {PrintWriter out = null; try {out = new PrintWriter (новый BufferedWriter (новый FileWriter (targetFile, true))); out.println (ы); } finally {if (out! = null) {out.close (); }}}

39
ответ дан ripper234 15 August 2018 в 21:36
поделиться
  • 1
    О, спасибо. Меня поразила сложность всех других ответов. Я действительно не понимаю, почему люди любят усложнять свою (девелоперскую) жизнь. – Alphaaa 29 July 2013 в 17:05
  • 2
    Проблема с этим подходом заключается в том, что он открывает и закрывает выходной поток каждый раз. В зависимости от того, как и как часто вы пишете файл, это может привести к смехотворным накладным расходам. – Buffalo 28 July 2015 в 08:42
  • 3
    @Buffalo прав. Но вы всегда можете использовать StringBuilder для создания больших кусков (которые стоит написать), прежде чем записывать их в файл. – Konstantin K 19 March 2017 в 11:16

1.7 Подход:

  void appendToFile (String filePath, String content) бросает IOException {Path path = Paths.get (filePath);  try (BufferedWriter writer = Files.newBufferedWriter (путь, StandardOpenOption.APPEND)) {writer.newLine ();  writer.append (содержание);  } / * // Альтернатива: try (BufferedWriter bWriter = Files.newBufferedWriter (путь, StandardOpenOption.WRITE, StandardOpenOption.APPEND); PrintWriter pWriter = новый PrintWriter (bWriter)) {pWriter.println (); // иметь println ()  стиль вместо newLine ();  pWriter.append (content); // Также, bWriter.append (content);  } * /}  
0
ответ дан Sawan Patwari 15 August 2018 в 21:36
поделиться
  FileOutputStream stream = new FileOutputStream (путь, истина);  try {stream.write (string.getBytes ("UTF-8") // Выберите кодировку.);  } finally {stream.close ();  }  

Затем поймайте исключение IO где-то вверх по потоку.

2
ответ дан SharkAlley 15 August 2018 в 21:36
поделиться

Чтобы немного расширить на ответ Кипа , вот простой метод Java 7+ для добавления новой строки в файл, создавая его, если он еще не существует:

  try {final Path path = Paths.get ("путь / to / filename.txt");  Files.write (путь, Arrays.asList («Новая строка для добавления»), StandardCharsets.UTF_8, Files.exists (путь)? StandardOpenOption.APPEND: StandardOpenOption.CREATE);  } catch (final IOException ioe) {// Добавляем вашу собственную обработку исключений ...}  

Примечание: В приведенном выше примере используется файл Files.write [ ! d1], который записывает строки текста в файл (т. е. аналогично команде println ). Чтобы просто написать текст до конца (т. Е. Аналогично команде print ), можно использовать перегрузку Files.write , проходящую в байтовом массиве (например, "MYTEXT" .getBytes (StandardCharsets.UTF_8) ).

16
ответ дан Steve Chambers 15 August 2018 в 21:36
поделиться
1
ответ дан Tom Drake 15 August 2018 в 21:36
поделиться

В Java-7 это также можно сделать следующим образом:

  import java.nio.file.Files;  import java.nio.file.Path;  import java.nio.file.Paths;  import java.nio.file.StandardOpenOption;   

// ---------------------

  Путь filePath = Paths.get  ( "somefile.txt");  if (! Files.exists (filePath)) {Files.createFile (filePath);  } Files.write (filePath, «Текст для добавления» .getBytes (), StandardOpenOption.APPEND);   
13
ответ дан Tsolak Barseghyan 15 August 2018 в 21:36
поделиться
  • 1
    Каковы требования импорта? В какой библиотеке эти вещи используются? – Chetan Bhasin 12 April 2015 в 12:40
1
ответ дан userAsh 15 August 2018 в 21:36
поделиться

Я просто добавляю небольшие детали:

  new FileWriter («outfilename», true)  

2.nd (true) - это функция ( или, интерфейс), называемый appendable ( http://docs.oracle.com/javase/7/docs/api/java/lang/Appendable.html ). Он отвечает за возможность добавления некоторого контента в конец конкретного файла / потока. Этот интерфейс реализован с Java 1.5. Каждый объект (например, BufferedWriter, CharArrayWriter, CharBuffer, FileWriter, FilterWriter, LogStream, OutputStreamWriter, PipedWriter, PrintStream, PrintWriter, StringBuffer, StringBuilder, StringWriter, Writer) с этим интерфейсом может использоваться для добавления контента

В других слова, вы можете добавить некоторый контент в свой gzip-файл или какой-то http-процесс

5
ответ дан xhudik 15 August 2018 в 21:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: