2016-09-13 4 views
0

(Ich habe diese Art von Problem mehrmals, aber schließlich beschlossen, zu fragen, wie es geht) Mein Code ist so etwas (nicht wirklich, aber so bekommen Sie den Punkt):Entfernen letzte Zeile schrieb ich mit FileWriter, Java

FileWriter fW = new FileWriter(new File(fileName)); 
while (entries.hasNext()) { 
    fW.write(entry.next()); 
    fW.write("\n"); 
end 

ich eine Datei Schreiber in Java haben und es verwenden, Einträge in eine Datei zu schreiben. Nach jedem Eintrag gehe ich zur nächsten Zeile (eine Zeile für jeden Eintrag). Ich weiß zunächst nicht, wie viele Einträge es tatsächlich geben wird.

Jetzt gibt mir eine zusätzliche Zeile am Ende der Datei (aber es gibt keinen Eintrag, um es zu füllen). Gibt es eine (einfache) Möglichkeit, Dateischreiber zu verwenden, um die letzte Zeile zu löschen.

(In diesem Fall könnten Sie ein ähnliches Ergebnis erhalten, indem die ersten außerhalb der while-Schleife zu schreiben und tauschen dann die Reihenfolge:

fW.write("\n"); 
fW.write(entry.next()); 

aber wenn gab es so etwas wie:

fW.deleteLast() 

es wäre einfach und nützlich zu wissen. Ich habe so etwas nicht gefunden.)

Antwort

0

Sie könnten eine geringfügige Änderung an der Schleife vornehmen, so dass dies:

while (entries.hasNext()) { 
    fW.write(entry.next()); 
    fW.write("\n"); 
} 

dies zu:

while (entries.hasNext()) { 
    fW.write(entry.next()); 
    if(entries.hasNext()) 
     fW.write("\n"); 
} 

Alternativ:

while (entries.hasNext()) { 
    fW.write(entry.next()); 
    fW.write("\n"); 
} 

Becomes:

if(entries.hasNext()) 
     fW.write(entry.next()); 

while (entries.hasNext()) { 
     fW.write("\n"); 
    fW.write(entry.next()); 
} 
0

anstelle des Schreibens zu einem Stringbuilder in eine Datei schreiben. Wenn Sie fertig sind, entfernen Sie einfach das letzte Zeichen aus Ihrem StringBuilder und schreiben Sie den Inhalt in eine Datei. Nachteil ist, wenn Ihr Inhalt zu groß ist (100s von Megabyte), dann gibt es ein Speicherbenutzungsproblem.