wie man den Inhalt einer Textdatei löscht, ohne sich selbst zu löschen

89

Ich möchte den Inhalt der Datei 'A' in die Datei 'B' kopieren. Nach dem Kopieren möchte ich den Inhalt der Datei 'A' löschen und von Anfang an darauf schreiben. Ich kann die Datei 'A' nicht löschen, da sie sich auf eine andere Aufgabe bezieht.

Ich konnte den Inhalt mit der Java-Datei-API (readLine ()) kopieren, weiß aber nicht, wie ich den Inhalt der Datei löschen und den Dateizeiger auf den Anfang der Datei setzen soll.

Brigg
quelle

Antworten:

132

Drucken Sie einfach eine leere Zeichenfolge in die Datei:

PrintWriter writer = new PrintWriter(file);
writer.print("");
writer.close();
Vlad
quelle
14
Das Schreiben ist nicht erforderlich, und wenn bei einer anderen Aufgabe die Datei geöffnet ist, ist das Öffnen möglicherweise nicht einmal möglich.
Marquis von Lorne
writer.close ??, wir sind im Jahr 2017 !!!. Außerdem muss nicht gedruckt werden (""), da der Text überschrieben wird
FSm
1
@Andro, beachte den Zeitstempel und die Tags? Ich erinnere mich damals, dass es der zuverlässigste Weg war, eine Datei auf Android-Geräten zu leeren.
Vlad
@Vlad Wenn es nicht erforderlich ist, den Writer jetzt zu schließen, ist dies möglicherweise eine gute Idee, um die Antwort zu aktualisieren?
Linie
70

Ich glaube nicht, dass Sie überhaupt eine leere Zeichenfolge in die Datei schreiben müssen.

PrintWriter pw = new PrintWriter("filepath.txt");
pw.close();
Camleng
quelle
9
Da hast du recht. Alle Antworten, die einen Schreibvorgang anzeigen, sind falsch oder bestenfalls überflüssig.
Marquis von Lorne
33
Wie wäre es einfach new PrintWriter("filepath.txt").close();?
Supuhstar
1
Zitat aus Java-Dokumenten "Wenn die Datei existiert, wird sie auf die Größe Null gekürzt"
Pinkerton
1
Aber was tun, wenn sich die Datei im Anhänge-Modus befindet?
GURMEET SINGH
Oh Mann, ich kann nicht glauben, dass ich die einfache Antwort verpasst habe. Öffnen Sie die Datei im Kürzungsmodus. Ich hasse den Abschneidemodus so sehr, dass er mir entgangen ist.
30

Sie möchten die setLength () -Methode in der Klasse RandomAccessFile.

Burleigh Bär
quelle
5
Dies ist in der Tat die einzig richtige Antwort, da die Datei nicht gelöscht wird. Alle anderen Antworten tun es.
Marquis von Lorne
Ich brauche dies, weil ich die von der Logback-Android- Bibliothek erstellte Protokolldatei löschen möchte . Wenn ich die Protokolldatei manuell lösche, ist die Bibliothek nicht clever genug, um sie erneut zu erstellen, wenn ein Protokoll zum Schreiben vorhanden ist, bis ich meine App neu starte. Deshalb habe ich diese Methode angewendet und gearbeitet. Ich habe nicht viel gelernt. Ist es nicht der beste Ansatz? Bitte beraten.
Yeung
Lustigerweise habe ich ein Produktionsproblem, weil die Intenso-Karte der Klasse 10 einfriert (und das Zurücksetzen der Batterie erzwingt), wenn ich fileOnSdCard.setLength (0) für eine App aufrufe, die aus der APK-Datei installiert wurde. Ihre Klasse-4-Karte zeigte das Problem nie.
Poutrathor
10

Ein Liner zum Abschneiden:

FileChannel.open(Paths.get("/home/user/file/to/truncate"), StandardOpenOption.WRITE).truncate(0).close();

Weitere Informationen finden Sie in der Java-Dokumentation: https://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html

Michał
quelle
+1 Um nicht eine ganze Klasse zum Schreiben von Dateien zu instanziieren (und noch schlimmer, wenn Sie darauf schreiben). Dies sollte wirklich die akzeptierte Antwort sein.
Kröw
6

Wie wäre es unten:

File temp = new File("<your file name>");
if (temp.exists()) {
    RandomAccessFile raf = new RandomAccessFile(temp, "rw");
    raf.setLength(0);
}
Sanjay Singh
quelle
5

Öffnen Sie nach dem Kopieren von A nach B die Datei A erneut in den Schreibmodus und schreiben Sie dann eine leere Zeichenfolge hinein

Rasel
quelle
5

Einer der besten Begleiter für Java ist Apache Projects. Bitte beziehen Sie sich darauf. Informationen zum dateibezogenen Betrieb finden Sie im Commons IO- Projekt.

Der Code unter einer Zeile hilft uns, die Datei leer zu machen.

FileUtils.write(new File("/your/file/path"), "")
Anver Sadhat
quelle
4

Einfach schreiben:

FileOutputStream writer = new FileOutputStream("file.txt");
Manh Vu
quelle
2

Schreiben Sie eine leere Zeichenfolge in die Datei, leeren Sie sie und schließen Sie sie. Stellen Sie sicher, dass sich der Dateischreiber nicht im Append-Modus befindet. Ich denke, das sollte den Trick machen.

hakon
quelle
2

Wenn Sie den Writer danach nicht mehr verwenden müssen, wäre dies der kürzeste und sauberste Weg:

new FileWriter("/path/to/your/file.txt").close();
Markus L.
quelle
0

Sie können verwenden

FileWriter fw = new FileWriter(/*your file path*/);
PrintWriter pw = new PrintWriter(fw);
pw.write("");
pw.flush(); 
pw.close();

Denken Sie daran, nicht zu verwenden

FileWriter fw = new FileWriter(/*your file path*/,true);

True im Filewriter-Konstruktor aktiviert das Anhängen.

Revanth Kumar
quelle
0
FileOutputStream fos = openFileOutput("/*file name like --> one.txt*/", MODE_PRIVATE);
FileWriter fw = new FileWriter(fos.getFD());
fw.write("");
Harpreet Singh
quelle
Willkommen bei SO! Verwenden Sie die integrierten Formatierungswerkzeuge, um das Lesen Ihres Codes zu erleichtern.
Michael L.
0

Mit Try-with-Resources wird der Writer automatisch geschlossen:

import org.apache.commons.lang3.StringUtils;
final File file = new File("SomeFile");
try (PrintWriter writer = new PrintWriter(file))  {
    writer.print(StringUtils.EMPTY);                
}
// here we can be sure that writer will be closed automatically
Bartek
quelle
0

Verwenden Sie: Neue Java 7 NIO-Bibliothek, versuchen Sie es

        if(!Files.exists(filePath.getParent())) {
            Files.createDirectory(filePath.getParent());
        }
        if(!Files.exists(filePath)) {
            Files.createFile(filePath);
        }
        // Empty the file content
        writer = Files.newBufferedWriter(filePath);
        writer.write("");
        writer.flush();

Der obige Code prüft, ob Directoty vorhanden ist, wenn das Verzeichnis nicht erstellt wird. Überprüft, ob eine Datei vorhanden ist. Ja, es wird eine leere Zeichenfolge geschrieben und der Puffer geleert. Am Ende wird der Writer auf eine leere Datei zeigen

Harsha
quelle
0

Alles was Sie tun müssen, ist die Datei im Kürzungsmodus zu öffnen. Jede Java File Out-Klasse erledigt das automatisch für Sie.


quelle
-2

Sie können eine generische Methode schreiben als (es ist zu spät, aber der folgende Code hilft Ihnen / anderen)

public static FileInputStream getFile(File fileImport) throws IOException {
      FileInputStream fileStream = null;
    try {
        PrintWriter writer = new PrintWriter(fileImport);
        writer.print(StringUtils.EMPTY);
        fileStream = new FileInputStream(fileImport);
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            writer.close();
        }
         return fileStream;
}
Vishal
quelle
5
Dadurch wird keine leere Datei erstellt, sondern eine Datei mit einem Nullbyte.
Marquis von Lorne