Это лучший способ переписать содержимое файла на Java?

Я хочу переписать содержимое файла.

То, о чем я думал до сих пор, следующее:

  1. Сохранить имя файла
  2. Удалить существующий файл
  3. Создайте новый пустой файл с тем же именем
  4. Напишите нужный контент в пустой файл

Это лучший способ? Или существует более прямой способ, то есть не нужно удалять и создавать файлы, а просто изменять контент?

Чтобы перезаписать файл foo.log с помощью FileOutputStream:

File myFoo = new File("foo.log"); FileOutputStream fooStream = new FileOutputStream(myFoo, false); // true to append // false to overwrite. byte[] myBytes = "New Contents\n".getBytes(); fooStream.write(myBytes); fooStream.close(); 

или с помощью FileWriter:

 File myFoo = new File("foo.log"); FileWriter fooWriter = new FileWriter(myFoo, false); // true to append // false to overwrite. fooWriter.write("New Contents\n"); fooWriter.close(); 

Я бы очень рекомендовал использовать FileUtil для Apache Common для этого. Я нашел этот пакет неоценимым. Он прост в использовании и не менее важен, его легко прочитать / понять, когда вы вернетесь позже.

 //Create some files here File sourceFile = new File("pathToYourFile"); File fileToCopy = new File("copyPath"); //Sample content org.apache.commons.io.FileUtils.writeStringToFile(sourceFile, "Sample content"); //Now copy from source to copy, the delete source. org.apache.commons.io.FileUtils.copyFile(sourceFile, fileToCopy); org.apache.commons.io.FileUtils.deleteQuietly(sourceFile); 

Дополнительную информацию можно найти по адресу: http://commons.apache.org/io/api-release/org/apache/commons/io/FileUtils.html.

См .: java.io.RandomAccessFile

Вы захотите открыть файл read-write, так что:

 RandomAccessFile raf = new RandomAccessFile("filename.txt", "rw"); String tmp; while (tmp = raf.readLine() != null) { // Store String data } // do some string conversion raf.seek(0); raf.writeChars("newString"); 

Если вы просто не добавляете контент в конце, разумно это делать. Если вы добавляете, попробуйте FileWriter с помощью конструктора append.

Немного лучший порядок:

  1. Создайте новое имя файла (например, foo.txt.new)
  2. Записывайте обновленный контент в новый файл.
  3. У атомного переименования из foo.txt.new в foo.txt

К сожалению, renameTo не гарантированно выполняет атомарное переименование.

В приведенном ниже примере «false» заставляет файл быть перезаписанным, true приведет к обратному.

 File file=new File("C:\Path\to\file.txt"); DataOutputStream outstream= new DataOutputStream(new FileOutputStream(file,false)); String body = "new content"; outstream.write(body.getBytes()); outstream.close(); 

Бывают случаи, когда можно захотеть сохранить огромный пустой файл, чтобы избежать дополнительной стоимости ОС, выделяющей пространство по необходимости. Обычно это делается с помощью баз данных, виртуальных машин, а также в пакетных программах, которые обрабатывают и записывают объемные данные. Это значительно улучшит производительность приложения. В этих случаях писать новый файл и переименовывать его не помогло бы. Вместо этого пустой файл должен быть заполнен. То есть, когда нужно перейти в режим переопределения.

Guava File.write «Перезаписывает файл с содержимым байтового массива»:

 Files.write(bytes, new File(path)); 
  • Любые хорошие рекомендации для MP3 / звуковых библиотек для java?
  • Что эквивалентно ключевому слову C # 'var' в Java?
  • Как добавить JTable в JPanel с нулевой компоновкой?
  • как отключить dtd во время выполнения в xpath java?
  • Java - Как создать настраиваемое диалоговое окно?
  • Метод оценки математических выражений в Java
  • Java 8 Streams: несколько фильтров или сложное условие
  • Самый простой способ объединить два списка в карту (Java)?
  • Как безопасно хранить ключи шифрования в java?
  • Сравнение элементов enums Java: == или equals ()?
  • Летучие Vs Atomic
  • Давайте будем гением компьютера.