2016-08-10 4 views
-3

Ich bin neu in Java und nur mit dem Kopf FileReader/FileWriter kam aber etwas, das ich nicht verstanden, also wenn jemand erklären könnte, warum dieser 1. Versuch/Fang nicht funktioniert und der 2. Versuch/fangen tut?Java FileReader versuchen Catch-Platzierung

Funktioniert nicht

try{ 
    FileWriter filewriter = new FileWriter(filepath); 
    filewriter.write(json.toString()); 
    saved = true; 
} catch (IOException ex) { 
    Logger.getLogger(PresetData.class.getName()).log(Level.SEVERE, null, ex); 
} 

Funktioniert

try(FileWriter filewriter = new FileWriter(filepath)){ 
    filewriter.write(json.toString()); 
    saved = true; 
} catch (IOException ex) { 
    Logger.getLogger(PresetData.class.getName()).log(Level.SEVERE, null, ex); 
} 

Welchen Unterschied es dort statt in der try/catch macht setzen?

Danke für jede Anleitung.

+0

Was meinst du mit "funktioniert nicht"? Erhalten Sie eine Fehlermeldung? Wenn ja, wie lautet die genaue Fehlermeldung? Wird es kompiliert, aber tun Sie etwas anderes als Sie erwartet haben, wenn Sie es ausführen? Wenn ja, was genau haben Sie dann erwartet und was macht es anders? – Jesper

+0

Wenn der erste nicht funktioniert, welchen Fehler bekommen Sie, wenn Sie das Programm ausführen? –

+0

von doesnt Arbeit ich meine, tut es erfolgreich, aber nichts ist in die Datei geschrieben? – Parody

Antwort

2

Das erste Beispiel fängt nur Ausnahmen ab, gibt die Ressource jedoch nie frei. Sie haben es über den Aufruf der .close() Funktion in einem finally-Block manuell schließen: https://docs.oracle.com/javase/7/docs/api/java/io/OutputStreamWriter.html#close()

Das zweite Beispiel „versuchen, mit Ressourcen“ bezeichnet wird, wie Sie hier lesen: https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html -> Es wird automatisch aufrufen die .close() - Funktion für Sie, so dass Sie sich keine Gedanken über Ressourcenlecks machen müssen.

Die Ausnahmebehandlung über den Catch-Block ist in beiden Beispielen gleich.