Это лучший способ переписать содержимое файла на Java?
Я хочу переписать содержимое файла.
То, о чем я подумал, следующее:
- Сохранить имя файла
- Удалить существующий файл
- Создайте новый пустой файл с тем же именем
- Введите нужный контент в пустой файл
Это лучший способ? Или существует более прямой способ, то есть не нужно удалять и создавать файлы, а просто изменять контент?
Ответы
Ответ 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));