Ist es möglich i einem finally-Block wieder ein try and catch-Block einzufügen. für z.B. Dateioperation
Java:
try{Dateileseoperation}catch(IoException ioex){
ioex.printStackTrace()}finally{//Wenn das lesen der Datei nicht funktioniert hat//neue Datei erstellentry{Dateischreiboperaation}catch(IoException ioex){
ioex.printStackTrace()}
Jop ist möglich - TCFTC (try-catch-finally-try-catch)
Wenn du z.B. ein close() (was normal auch in ein try-catch muss) im finally machen willst, musst du das sogar.
Allerdings sind deine Kommentare etwas verwirrend für mich...
Es wird versucht eine Datei zu lesen.
Wenn es dabei eine Exception gibt, wird eine Datei erstellt (Aber das muss im catch nicht im finally sein!)
Im finally wird dann geschrieben.
Stell dir vor du versuchst die Datei auf einem Pfad zu lesen den es nicht gibt.
Dann kannst du auch keine Datei erstellen weil es ja den Pfad nicht gibt
Es gibt die Möglichkeit abzufragen ob eine Datei exsistiert - bzw ob der Pfad exisitert aber auswendig weiss ich nicht wie.
So sehe ich das ...
Java:
publicclassTest3{privatestaticvoiddateiLeseOperation()throwsIOException{}privatestaticvoiddateiSchreibOperation()throwsIOException{}privatestaticvoiddateiSchliessOperation()throwsIOException{}publicstaticvoidmain(String[] args){try{dateiLeseOperation();}catch(IOException ioex){// Hier muss die Datei erstellt werden!
ioex.printStackTrace();try{dateiSchreibOperation();}catch(IOException ioex2){// Hm - total aufgeben ist hier wohl sinnvollreturn;}}finally{try{// weil man hier immer vorbeikommt ...dateiSchliessOperation();}catch(IOException ioex){
ioex.printStackTrace();}}}}
Ja, wenn man das komplett "sauber" machen will, ist das tatsächlich sogar ziemlich kompliziert:
Java:
publicvoidwrite(File file,byte data[]){OutputStream out =null;try{
out =newFileOutputStream(file);
out.write(data);}catch(FileNotFoundException e){
e.printStackTrace();}catch(IOException e){
e.printStackTrace();}finally{if(out !=null){try{
out.close();}catch(IOException e){
e.printStackTrace();}}}}
Es gibt AFAIR irgendeinen JSR, damit das in Zukunft eher so geht, wie man sich es vielleicht wünschen würde (und wie es oft gemacht wird, wie es aber "eigentlich falsch" ist...)
Java:
publicvoidwrite(File file,byte data[]){try{OutputStream out =newFileOutputStream(file);
out.write(data);
out.close();}catch(IOException e){
e.printStackTrace();}}
EDIT: Hab' mal FArt's Vorschlag von unten noch eingefügt. Kann ja nicht schaden
Joa, sicher. DA kann man ja dann wirklich nichts mehr machen, und ich wüßte auch nicht, wo das in der Praxis passieren könnte, und wo dann nicht schon vorher irgendwas auf fatalste weise abgekachelt sein müßte - aber vielleicht ist gereade das der Grund, weswegen man diesem Fall noch eine Log-Ausgabe spendieren könnte