Это лучший способ переписать содержимое файла на Java?
Я хочу переписать содержимое файла.
То, о чем я думал до сих пор, следующее:
- Сохранить имя файла
- Удалить существующий файл
- Создайте новый пустой файл с тем же именем
- Напишите нужный контент в пустой файл
Это лучший способ? Или существует более прямой способ, то есть не нужно удалять и создавать файлы, а просто изменять контент?
- Как использовать тот же код на C ++ для Android и iOS?
- Лучший способ автоматически переносить тесты с JUnit 3 на JUnit 4?
- Как установить среду java в Windows 8?
- Без броска VirtualMachineError гарантирует
- компонент java swing не может быть разрешен
- как я могу вставить lua в java?
- Пакет конфликтует с автоматическими модулями в Java 9
- Что делает InputStream.available () в Java?
- Как установить свойство Java-системы, чтобы оно было эффективным, когда я запускаю JVM без добавления его в аргументы командной строки
- Почему статическое поле должно быть доступно статическим способом?
- Где можно загрузить JSTL jar
- Чтение определенной строки из текстового файла в Java
- Оценка математического выражения, заданного в виде строки
Чтобы перезаписать файл 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.
Немного лучший порядок:
- Создайте новое имя файла (например, foo.txt.new)
- Записывайте обновленный контент в новый файл.
- У атомного переименования из 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));