Dies ist in Java 6.löschen temporäre Datei während schließlich vs löschen Ausgabedatei beim Fang
ich mehr als einmal gesehen haben, dass die Menschen temporäre Dateien erstellen, tun Sie etwas, benennen Sie es dann in die Ausgabedatei. Alles ist in einen try-finally-Block eingebettet, in dem die temporäre Datei in finally
gelöscht wird, falls etwas dazwischen schief geht.
try {
//do something with tempFile
//do something with tempFile
//do something with tempFile
tempFile.renameTo(outputFile);
}
finally {
if (tempFile.exists())
tempFile.delete()
}
Ich frage mich, was sind die Vorteile, dass statt etwas zu tun, in die Ausgabedatei direkt und löschen Sie es bei Ausnahmen zu tun.
try {
//do something with outputFile
//do something with outputFile
//do something with outputFile
}
catch (Exception e) {
if (outputFile.exists())
outputFile.delete();
}
Meine Vermutung ist, dass temporäre Dateien löschen in finally
mir zugute kommt, wenn der try-Block viele Arten von Ausnahmen auslösen können. Ist meine Vermutung richtig? Was sonst?
Darüber hinaus wird der obige Fang auch bei normaler Ausführung nicht ausgeführt (kein Throwable geworfen), während er schließlich in beide Richtungen ausgeführt wird. –
also, wenn ich statt dessen 'Throwable' gewählt habe (obwohl nicht empfohlen) und die Rückgabewerte von' renameTo' überprüft habe. Der Fall ohne "finally" wird dem Fall mit "finally" etwas ähnlicher sein?+1, weil du der Einzige zu sein scheinst, der meine (vage) Frage auf hohem Niveau beantwortet, anstatt mir den Unterschied zwischen "catch" und "finally" beizubringen (was ich sowieso sehr schätze). – Russell
Nein. Sie haben vergessen, dass jemand im Block "try" 'return' aufrufen kann. Sie sehen also, dass die Lösung mit 'finally' * immer * funktioniert, während jede andere Lösung * meistens * funktioniert. –