Wie speichere ich eine Datei mit JFileChooser in Java?
Habe ich folgenden code. Es speichert die Datei, aber mit leerem Inhalt. Was ist Los mit ihm?
public void saveMap() {
String sb = "TEST CONTENT";
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("/home/me/Documents"));
int retrival = chooser.showSaveDialog(null);
if (retrival == JFileChooser.APPROVE_OPTION) {
try {
FileWriter fw = new FileWriter(chooser.getSelectedFile()+".txt");
fw.write(sb.toString());
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
InformationsquelleAutor der Frage Michał Tabor | 2013-01-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie mit Java 7, mit try-mit-Ressourcen. Dies ist, wie Sie es tun würde:
Versuchen mit Ressourcen automatisch Anrufe
close()
auf Erfolg oder Misserfolg.Wenn du nicht mit Java 7, vergessen Sie nicht, rufen
close()
.close()
automatisch einen call -flush()
.Zu verstehen, warum Sie brauchen, um zu Spülen, müssen Sie verstehen, wie ein FileWriter funktioniert. Wenn Sie sagen
fw.write("blah")
es eigentlich bringt, dass der string in einem Puffer im Speicher. Füllen Sie den Puffer, der FileWriter schreibt dann der string auf die Festplatte. Es ist dieses Verhalten, da das schreiben von Dateien ist viel effizienter, in großen Blöcken.Wenn Sie möchten, um den Puffer zu leeren, bevor der Puffer-Kapazität erreicht haben, müssen Sie sagen, den FileWriter durch aufrufen
flush()
. Aufrufflush()
auch sehr wichtig bei der Kommunikation, beispielsweise über das internet, weil Sie brauchen werden, zu Spülen, bevor am anderen Ende können Sie sehen, Ihre Nachricht. Es wird nicht viel nutzen, wenn Sie Ihre Nachricht einfach sitzen im Speicher.Sobald Sie fertig sind mit jeder I/O-stream, rufen Sie
close()
(mit Ausnahme der standard-I/O-streams). Dies bedeutet, dass das Betriebssystem nicht mehr zu halten streamen. In einigen Fällen gibt es eine begrenzte Anzahl von streams, die geöffnet werden können, wie mit Dateien, so ist es äußerst wichtig, dass Sie nicht vergessen zu schließen.Wenn Sie in der Nähe nennen, der es tatsächlich tut, sind zwei Dinge: es leert den Puffer und dann den stream schließt. Dies ist, um sicherzustellen, dass nichts zurückgelassen wird, bevor der stream geschlossen wird.
InformationsquelleAutor der Antwort Ryan Amos
Vergessen Sie nicht
flush
undclose
IhreFileWriter
.InformationsquelleAutor der Antwort Dan D.
Müssen Sie
close()
Ihre FileWriter.InformationsquelleAutor der Antwort SLaks