try and catch block in finally

nieselfriem

Bekanntes Mitglied
Hallo!

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 erstellen
  try {
    Dateischreiboperaation
  }catch (IoException ioex)  {
      ioex.printStackTrace()

  }

Oder gibt es da einen besseren Weg?

Gruß niesel
 

eRaaaa

Top Contributor
Jop ist möglich - TCFTC (try-catch-finally-try-catch) :D
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...
 

Andi_CH

Top Contributor
Hm - ich meine die Komentare zu verstehen--

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:
public class Test3 {

	private static void dateiLeseOperation() throws IOException {}
	private static void dateiSchreibOperation() throws IOException {}
	private static void dateiSchliessOperation() throws IOException {}

	public static void main(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 sinnvoll
				return;
			}
		}finally {
			try {
				// weil man hier immer vorbeikommt ...
				dateiSchliessOperation();
			} catch (IOException ioex) {
				ioex.printStackTrace();
			}
		}
	}
}
 

Marco13

Top Contributor
Ja, wenn man das komplett "sauber" machen will, ist das tatsächlich sogar ziemlich kompliziert:
Java:
    public void write(File file, byte data[])
    {
        OutputStream out = null;
        try
        {
            out = new FileOutputStream(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:
    public void write(File file, byte data[])
    {
        try
        {
            OutputStream out = new FileOutputStream(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 :)
 
Zuletzt bearbeitet:

FArt

Top Contributor
Ich bin noch ein wenig dogmatischer eingestellt als Marco13 ;-)
Ich würde auch die Exception des close nicht völlig ignorieren sondern noch loggen.
 

Marco13

Top Contributor
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 ;)
 

tfa

Top Contributor
Es gibt AFAIR irgendeinen JSR, damit das in Zukunft eher so geht, wie man sich es vielleicht wünschen würde

In Java 7 wird es dann hoffentlich so aussehen:

Java:
try (OutputStream out = new FileOutputStream(file);)
{            
    out.write(data);
}

oder wenn man die Exception nicht deklarieren möchte:

Java:
try (OutputStream out = new FileOutputStream(file);)
{            
    out.write(data);
}
catch(IOException x) {
    throw new RuntimeException(x);
}
 

FArt

Top Contributor
In Java 7 wird es dann hoffentlich so aussehen:

Java:
try (OutputStream out = new FileOutputStream(file);)
{            
    out.write(data);
}

oder wenn man die Exception nicht deklarieren möchte:

Java:
try (OutputStream out = new FileOutputStream(file);)
{            
    out.write(data);
}
catch(IOException x) {
    throw new RuntimeException(x);
}

Geht sogar schon ohne Java 7, mit dem Projekt lombok:
Project Lombok
@Cleanup
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D try/catch-Block bei for-Schleife Java Basics - Anfänger-Themen 14
B Try-Catch Block Java Basics - Anfänger-Themen 3
F Mehrere Exceptions in einem Catch-Block abfangen Java Basics - Anfänger-Themen 12
J Code in Try-Catch Block wird nicht komplett ausgeführt Java Basics - Anfänger-Themen 5
A Nicht zu findender Fehler in einem try/catch Block Java Basics - Anfänger-Themen 6
E Buchstaben verhindern / Try & Catch Block Java Basics - Anfänger-Themen 3
L Warum ist der catch-Block nicht erreichbar ? Java Basics - Anfänger-Themen 8
N Catch Block in Try erzwingen Java Basics - Anfänger-Themen 14
E Problem mit for schleife/ try-catch block Java Basics - Anfänger-Themen 7
B Exception vor catch Block definieren Java Basics - Anfänger-Themen 9
V Was ist ein Try-Catch Block Java Basics - Anfänger-Themen 4
M Exception->mehrere Exceptions in einem Catch Block behand Java Basics - Anfänger-Themen 4
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
missy72 Catch Blöcke zusammenfassen Java Basics - Anfänger-Themen 6
Ostkreuz wie geht der catch? Java Basics - Anfänger-Themen 3
D Best Practice Ausgabe über direkte Ausgabe oder try-catch? Java Basics - Anfänger-Themen 13
districon Try - Catch Java Basics - Anfänger-Themen 8
JavaNoobi Try and Catch und übergabe von Objekten Java Basics - Anfänger-Themen 2
Y Wie kann ich die Variable in der Try Catch returnen? Java Basics - Anfänger-Themen 3
B JUnit / Exceptions/ try-catch Java Basics - Anfänger-Themen 6
B try catch finally Java Basics - Anfänger-Themen 2
H throws und try catch Java Basics - Anfänger-Themen 8
H Try Catch Throw Exception Java Basics - Anfänger-Themen 1
S Try-Catch in Verwendung einer while Schleife Java Basics - Anfänger-Themen 2
I Try-Catch innerhalb eines Catchblocks Java Basics - Anfänger-Themen 1
J Endlosschleife bei Try-Catch? Java Basics - Anfänger-Themen 3
K JOptionPane/catch/try/finally/if Java Basics - Anfänger-Themen 9
V InputMismatchException (Try and catch) Java Basics - Anfänger-Themen 10
L do-while-Schleife läuft doppelt, try catch fehler Java Basics - Anfänger-Themen 12
J Erste Schritte catch Exeption Parameter Java Basics - Anfänger-Themen 7
TheMenox Try and Catch Java Basics - Anfänger-Themen 12
J Try Catch Java Basics - Anfänger-Themen 6
DeVolt Java8 Paket Time: Datum prüfen / try-catch Java Basics - Anfänger-Themen 1
J Frage zum Thema Exceptions (Try/Catch) Java Basics - Anfänger-Themen 3
F try/catch Ausführungen ? Java Basics - Anfänger-Themen 3
S try-catch - Variablen werden nicht an return übergeben Java Basics - Anfänger-Themen 3
Z Catch & Exceptions Java Basics - Anfänger-Themen 4
I Exception try-catch Java Basics - Anfänger-Themen 1
F try/catch - (else) Java Basics - Anfänger-Themen 11
C Problem mit try-catch in Schleife Java Basics - Anfänger-Themen 15
R Exceptions (try/catch) Java Basics - Anfänger-Themen 63
H Geht dieser Code noch einfacher (try catch finally) Java Basics - Anfänger-Themen 7
J Methoden try / catch exception Java Basics - Anfänger-Themen 5
S 'continue' in catch- und if-blöcken Java Basics - Anfänger-Themen 2
B Erste Schritte try-catch-Klauseln, überprüfte Ausnahmen Java Basics - Anfänger-Themen 4
D Erste Schritte Warum try-catch für FileWriter Java Basics - Anfänger-Themen 5
S try-catch-finally-Problem Java Basics - Anfänger-Themen 10
xehpuk Compiler-Fehler final Variable in try-catch Wert zuweisen Java Basics - Anfänger-Themen 8
F Exceptionbehandlung --> catch/throws Java Basics - Anfänger-Themen 11
M Try und Catch Java Basics - Anfänger-Themen 5
B Fehler mit try + catch verhindern Java Basics - Anfänger-Themen 8
B Variablen Variablen in try / catch "public" machen? Java Basics - Anfänger-Themen 3
C Wiederholung von try-catch Java Basics - Anfänger-Themen 3
M exception catch falsch? Java Basics - Anfänger-Themen 11
S catch Exception erklären Java Basics - Anfänger-Themen 2
C Variable in try/catch Java Basics - Anfänger-Themen 10
B Try and Catch Java Basics - Anfänger-Themen 6
StrikeTom Ein paar(2) Fragen zu throws und try + catch Java Basics - Anfänger-Themen 6
J try und catch Java Basics - Anfänger-Themen 7
G Exceptionfreie Anweisungen in try-catch-Blöcke, Java Basics - Anfänger-Themen 6
M Frage zu try ... catch Java Basics - Anfänger-Themen 9
S NumberFormatException , mit Try/Catch? Java Basics - Anfänger-Themen 7
B Try/catch Java Basics - Anfänger-Themen 11
M Try & Catch Java Basics - Anfänger-Themen 7
M Nach catch mit der schleife weitermachen Java Basics - Anfänger-Themen 9
M try-catch, call-by-reference, Streaming und Strings Java Basics - Anfänger-Themen 10
S sauberer Stil von return Wert (try, catch, finally) Java Basics - Anfänger-Themen 9
S try-catch Java Basics - Anfänger-Themen 10
Tandibur Server führt "try-catch" nicht aus Java Basics - Anfänger-Themen 6
H Falsche Eingabe über try-catch abfangen Java Basics - Anfänger-Themen 2
I Frage zu Try - Catch - Finally Java Basics - Anfänger-Themen 10
Daniel_L Verwendung von try und catch bei exceptions Java Basics - Anfänger-Themen 7
GambaJo Wann try.catch nutzen? Java Basics - Anfänger-Themen 11
H try catch Java Basics - Anfänger-Themen 4
I double-Variable außerhalb des Try-Catch-Blocks nicht gültig Java Basics - Anfänger-Themen 2
D Catch wiederholt sich ständig Java Basics - Anfänger-Themen 2
T try-catch-finally Java Basics - Anfänger-Themen 8
G Anwendung von try-catch Java Basics - Anfänger-Themen 10
G try. catch Verwendung Java Basics - Anfänger-Themen 11
M Try-Catch-Problem Java Basics - Anfänger-Themen 4
G habe ein Catch problem Java Basics - Anfänger-Themen 7
C Nach Catch-Klausel Programm weiter laufen lassen Java Basics - Anfänger-Themen 5
B try & catch Problem mit Exception bzw String.split() Java Basics - Anfänger-Themen 5
C Frage zu try - catch (saubere Lösung?) Java Basics - Anfänger-Themen 3
G Bei catch beenden Java Basics - Anfänger-Themen 7
U catch mit finally Java Basics - Anfänger-Themen 5
C Exceptions, try, catch --> Frage Java Basics - Anfänger-Themen 7
J Try-Catch-Frage Java Basics - Anfänger-Themen 13
B catch exception funktioniert nicht! Java Basics - Anfänger-Themen 14
D Frage try and catch Java Basics - Anfänger-Themen 7
ven000m try catch - was muss bei catch rein Java Basics - Anfänger-Themen 28
G Datenbank - catch Java Basics - Anfänger-Themen 2
H Konstruktor in Methode fremder Klasse: try-catch-Problem Java Basics - Anfänger-Themen 4
M return und try-catch Java Basics - Anfänger-Themen 6
M Try . catch erzwungen? Java Basics - Anfänger-Themen 11
F eigene Exception aus try-catch werfen Java Basics - Anfänger-Themen 10
A Syntaxproblem mit try und catch Java Basics - Anfänger-Themen 3
Silver-Blue fragen zu Swing und catch Exceptions Java Basics - Anfänger-Themen 2
G return fehler bei try catch Java Basics - Anfänger-Themen 8
H try und catch Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben