Подтвердить что ты не робот

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

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

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

  • Сохранить имя файла
  • Удалить существующий файл
  • Создайте новый пустой файл с тем же именем
  • Введите нужный контент в пустой файл

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

4b9b3361

Ответ 1

Чтобы перезаписать файл 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();

Ответ 2

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

//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

Ответ 3

Смотрите: java.io.RandomAccessFile

Вы хотите открыть файл-чтение-запись, поэтому:

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");

Ответ 4

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

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

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

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

Ответ 5

В приведенном ниже примере "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(); 

Ответ 6

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

Ответ 7

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

Files.write(bytes, new File(path));