Действительно ли это - лучший способ переписать содержание файла в Java?

Вы должны смоделировать URL, используя вложенные ресурсы. Ожидаемый URL будет / авторы / 1 / сообщений. Думайте об авторах как о ресурсах. Прочитайте о вложенных ресурсах в этом руководстве: http://guides.rubyonrails.org/routing.html (прокрутите до 2.7 - Вложенные ресурсы).

44
задан Peter Mortensen 2 August 2010 в 19:48
поделиться

6 ответов

Чтобы перезаписать файл 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();
81
ответ дан 26 November 2019 в 21:54
поделиться

Я настоятельно рекомендую использовать для этого 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

12
ответ дан 26 November 2019 в 21:54
поделиться

См .: 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");
5
ответ дан 26 November 2019 в 21:54
поделиться

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

Несколько лучший порядок будет:

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

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

2
ответ дан 26 November 2019 в 21:54
поделиться

В приведенном ниже примере значение «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(); 
1
ответ дан 26 November 2019 в 21:54
поделиться

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

1
ответ дан 26 November 2019 в 21:54
поделиться
Другие вопросы по тегам:

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