Czy jest to najlepszy sposób na przepisanie zawartości pliku w Javie?
Chcę przepisać zawartość pliku.
Do tej pory myślałem o tym:
- Zapisz nazwę pliku
- Usuń istniejący plik
- Utwórz nowy pusty plik o tej samej nazwie
- zapis żądanej zawartości do pustego pliku
Czy to najlepszy sposób? A może jest bardziej bezpośredni sposób, to znaczy, że nie trzeba usuwać i tworzyć plików, ale po prostu zmienić zawartość?
7 answers
Aby nadpisać plik foo.log with 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();
Lub z 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();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-07 14:41:31
Gorąco polecam używanie w tym celu FileUtil Apache Common. Uważam, że ta paczka jest bezcenna. Jest łatwy w użyciu i równie ważne jest, że jest łatwy do odczytania/zrozumienia, gdy wrócisz chwilę później.
//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);
Więcej informacji można znaleźć na stronie: http://commons.apache.org/io/api-release/org/apache/commons/io/FileUtils.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-19 04:34:38
Zobacz: java. io. RandomAccessFile
Będziesz chciał otworzyć plik do odczytu i zapisu, więc:
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");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-19 04:05:35
O ile nie dodajesz treści na końcu, rozsądnie jest to zrobić w ten sposób. Jeśli dodajesz, spróbuj FileWriter z konstruktorem append.
Nieco lepszym porządkiem byłoby:
- Wygeneruj nową nazwę pliku (np. foo.txt.Nowy)
- Zapisz zaktualizowaną zawartość do nowego pliku.
- Do Atomic rename from foo.txt.nowy w foo.txt
Niestety, renameTo nie jest gwarantowane aby zrobić atomic rename.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-19 03:59:04
W poniższym przykładzie "false" powoduje nadpisanie pliku, true spowoduje odwrotnie.
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();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-19 04:00:06
Są chwile, kiedy można chcieć zachować ogromny pusty plik, aby uniknąć dodatkowych kosztów systemu operacyjnego przydzielającego miejsce w zależności od potrzeb. Zwykle odbywa się to za pomocą baz danych, maszyn wirtualnych, a także w programach wsadowych, które przetwarzają i zapisują dane zbiorcze. Poprawiłoby to znacznie wydajność aplikacji. W takich przypadkach napisanie nowego pliku i zmiana jego nazwy nie pomogłoby. Zamiast tego pusty plik będzie musiał zostać wypełniony. Wtedy trzeba przejść do trybu nadpisywania.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-20 13:53:06
Guajawa Plik.zapis "nadpisuje Plik z zawartością tablicy bajtów":
Files.write(bytes, new File(path));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-30 14:22:05