Frage

Ich möchte den Inhalt einer Datei neu zu schreiben.

Was habe ich gedacht, so weit ist diese:

  1. Speichern Sie die Dateinamen
  2. Löschen Sie die vorhandene Datei
  3. Erstellen Sie eine neue leere Datei mit dem gleichen Namen
  4. Schreiben Sie den gewünschten Inhalt in die leere Datei

Ist dies der beste Weg? Oder gibt es einen direkteren Weg, das heißt, nicht zum Löschen von Dateien und erstellen zu müssen, sondern einfach den Inhalts ändern?

War es hilfreich?

Lösung

Um die Datei foo.log mit Fileoutputstream überschreiben:

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

oder mit 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();

Andere Tipps

Ich würde empfehlen, die Apache Commons ist FileUtil für diese Verwendung. Ich habe dieses Paket von unschätzbarem Wert gefunden. Es ist einfach zu bedienen und ebenso wichtig ist es leicht zu lesen / zu verstehen, wenn man eine Weile später zurück.

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

Weitere Informationen finden Sie unter: http://commons.apache.org/io /api-release/org/apache/commons/io/FileUtils.html

Siehe auch: java.io.RandomAccessFile

Sie erhalten eine Datei read-write geöffnet werden soll, so:

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

Es sei denn, Sie nur Inhalte am Ende hinzufügen, es ist vernünftig, es so zu tun. Wenn Sie anhängt, versuchen Filewriter mit der append-Konstruktor.

Eine etwas bessere Ordnung sei:

  1. Neuen Dateinamen (z foo.txt.new)
  2. Schreiben aktualisierter Inhalte neue Datei.
  3. Sie Atom-Umbenennungs von foo.txt.new foo.txt

Leider renameTo ist nicht garantiert Atomumbenennungs zu tun.

Im folgende Beispiel wird die „false“ wird die Datei überschrieben werden, wahr das Gegenteil bewirken würde.

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

Es gibt Zeiten, in denen man eine große leere Datei halten möchten, um zusätzliche Kosten für das Betriebssystem auf Basis Notwendigkeit Zuteilung Raum zu vermeiden. Dies wird im Allgemeinen durch Datenbanken, virtuelle Maschinen durchgeführt und auch im Batch-Programmen, die Massendaten verarbeiten und schreiben. Dies würde die Leistung der Anwendung erheblich verbessern. In diesen Fällen um eine neue Datei zu schreiben und die Umbenennung es nicht wirklich helfen würde. Stattdessen wird die leere Datei werden müssen gefüllt. Das ist, wenn man für den Fahrmodus gehen muss.

Guava File.write " überschreibt eine Datei mit dem Inhalt eines Byte-Array ":

Files.write(bytes, new File(path));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top