Zweipunktnull
Commander
- Registriert
- Dez. 2004
- Beiträge
- 2.546
Hallo,
ich habe mal eine Frage zu E/A von Java. Ich versuche, die Ströme in finally-Blocks zu schließen, damit sie auf jeden Fall geschlossen werden. Dazu habe ich sogar ein Beispiel von Sun gefunden.
Das Problem ist, dass das so nicht immer funktioniert. Wenn ich folgendes versuche zu kompilieren, dann gibts eine Fehlermeldung:
Und zwar wäre bei dem out.close() eine unbehandelte IOException. Stimmt ja auch soweit, close() kann schließlich eine werfen. Nur wie löst man das Problem dann in der Praxis? In dem finally-Block nochmals ein weiteres try-catch-finally-Konstrukt schachteln? Das kommt mir irgendwie ziemlich dämlich vor. Das Sun-Beispiel funktioniert, weil die einen PrintWriter einsetzen und dessen close() irgendwie keine IOException wirft. Nun will (muss) ich aber einen BufferedWriter und keinen PrintWriter einsetzen. Muss man dort echt noch innerhalb des finally-Blocks neue try-catch-Konstrukte machen?
ich habe mal eine Frage zu E/A von Java. Ich versuche, die Ströme in finally-Blocks zu schließen, damit sie auf jeden Fall geschlossen werden. Dazu habe ich sogar ein Beispiel von Sun gefunden.
Code:
finally {
if (out != null) {
System.out.println("Closing PrintWriter");
out.close();
} else {
System.out.println("PrintWriter not open");
}
}
Das Problem ist, dass das so nicht immer funktioniert. Wenn ich folgendes versuche zu kompilieren, dann gibts eine Fehlermeldung:
Code:
BufferedWriter out = null;
try {
out = new BufferedWriter(new FileWriter(new File("c:\\Directory\\File.txt")));
out.write("String");
out.newLine();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
out.close();
}
}
Und zwar wäre bei dem out.close() eine unbehandelte IOException. Stimmt ja auch soweit, close() kann schließlich eine werfen. Nur wie löst man das Problem dann in der Praxis? In dem finally-Block nochmals ein weiteres try-catch-finally-Konstrukt schachteln? Das kommt mir irgendwie ziemlich dämlich vor. Das Sun-Beispiel funktioniert, weil die einen PrintWriter einsetzen und dessen close() irgendwie keine IOException wirft. Nun will (muss) ich aber einen BufferedWriter und keinen PrintWriter einsetzen. Muss man dort echt noch innerhalb des finally-Blocks neue try-catch-Konstrukte machen?