Erste Schritte Warum try-catch für FileWriter

DontKnowJava

Mitglied
Hallo und einen schönen Abend,

warum muss ich eigentlich zwingend einen try-catch Block um einen FileWriter stellen, bzw. eine Exception werfen*?

(*das heißt doch dann so wenn ich statt des try-catch Blocks schreibe: "public static void main(String args[]) throws Exception")?

Also ich habe folgenden Code mit dem ich Text in eine Datei schreibe
Java:
		try {
			FileWriter fr = new FileWriter("d:/test.txt");
			fr.write("noch etwas mehr Text");
			fr.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}

Was ich nicht begreife:
Warum _muss_ ich zwingend den try-catch Block dazu schreiben? Ansonsten bekomme ich einen Fehler.

Warum könnte ich nicht alternativ ein File-Objekt erstellen und das File-Objekt auf Fehler überprüfen? So etwa:

Java:
		File file = new File("d:\\test.txt");
		if( file.exists() && file.canWrite() ){
			//dann mach etwas mit dem FileWriter
		}

Vielen Dank im Voraus! :)
 
G

Gast2

Gast
Warum _muss_ ich zwingend den try-catch Block dazu schreiben?
Weil die API so designt wurde. Der Konstruktor kann eine IOException werfen (falls man bspw. nen Ordner angibt, oder die Datei nicht schreibbar ist).

Warum könnte ich nicht alternativ ein File-Objekt erstellen und das File-Objekt auf Fehler überprüfen?
Hätte man auch machen können. Dann würde man entsprechende Methoden anbieten und im Fehlerfall vielleicht ne Runtime Exception werfen.

bzw. eine Exception werfen*?
(*das heißt doch dann so wenn ich statt des try-catch Blocks schreibe: "public static void main(String args[]) throws Exception")?
Statt "werfen" würde ich lieber "weiterwerfen" sagen. Du reichst damit die Exception die auftritt an den Aufrufer weiter.
 

DontKnowJava

Mitglied
Weil die API so designt wurde. Der Konstruktor kann eine IOException werfen (falls man bspw. nen Ordner angibt, oder die Datei nicht schreibbar ist).

Das hat also jemand bei der Entwicklung von Java so quasi als feste Regel definiert?!


Statt "werfen" würde ich lieber "weiterwerfen" sagen. Du reichst damit die Exception die auftritt an den Aufrufer weiter.

Ahh! Das macht einiges klarer!
Danke! :)
 
G

Gast2

Gast
Es gibt im Prinzip zwei Arten von Exceptions. Zum einen checked exceptions (dazu gehört auch die IOException), die müssen per try-catch behandelt oder weitergeworfen werden. Daneben gibts dann noch unchecked exceptions (die erben von RuntimeException), die KÖNNEN per try-catch behandelt werden, man wird aber nicht dazu gezwungen.

Da man beim FileWriter die IOException verwendet hat, zwingt man den Nutzer dazu die IOException per try-catch zu behandeln.
 
G

Gast2

Gast
Moin,

Weil die API so designt wurde.
vom Prinzip her richtig - aber dennoch ungünstig bzw. nicht das Grundlegende Problem erklärt.

Java:
		if( file.exists() && file.canWrite() ){
Auch wenn das jetzt wie ein Befehl aussieht, das ist es aber nicht. Dein Wissenswunsch (ob die Datei existiert und ob Du schreiben kannst) kleckert jetzt noch durch die Java-API. Nach der java-API kommt noch das Betriebssystem dran. Wie Du merkst passiert hier verdammt viel, es existieren noch viel mehr verschiedener Zeilen. Das Ganze musst Du aber auf Assembler runter brechen (das Java hier erst einen Zwischenschritt macht ignorieren wir mal), die CPU versteht ja nix anderes. Dann werden noch mehr Befehle draus - aus einer Zeile (und vermeindlich einem Befehl) werden mal schnell Hunderte.

Jetzt hast Du aber ein Multitask-System, d.h. es randalieren mehrere Programme auf einer Festplatte. Es ist gar nicht garantiert das durch Deine Abfrage wirklich die Datei vorhanden ist bzw Du darauf schreiben kannst. Das kann Dir der Contextwechsel Deines Programms erheblich versauen

Das mal in etwas Pseudo-Code:

Code:
Task1: bool exists = DateiExistiert("foo.txt")     // if( file.exists() ...
Task1: bool write = DateiBeschreibbar("foo.txt");  // ... file.canWrite() )
BS: ContextWechsel(Task1, Task2);
Task2: EntferneDatei("foo.txt");
Task2: [...]
BS: ContextWechsel(Task2, Task1);
Task1: wenn exists und write dann MacheWas("foo.txt")
Task2: [...]

Wie Du siehst kann die ein anderes Programm jederzeit dazwischen funken.

hand, mogel
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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 try/catch-Block bei for-Schleife Java Basics - Anfänger-Themen 14
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 Try-Catch Block 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
F Mehrere Exceptions in einem Catch-Block abfangen Java Basics - Anfänger-Themen 12
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 Code in Try-Catch Block wird nicht komplett ausgeführt Java Basics - Anfänger-Themen 5
J Frage zum Thema Exceptions (Try/Catch) Java Basics - Anfänger-Themen 3
A Nicht zu findender Fehler in einem try/catch Block Java Basics - Anfänger-Themen 6
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
E Buchstaben verhindern / Try & Catch Block Java Basics - Anfänger-Themen 3
F try/catch - (else) Java Basics - Anfänger-Themen 11
L Warum ist der catch-Block nicht erreichbar ? Java Basics - Anfänger-Themen 8
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
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
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 Variablen Variablen in try / catch "public" machen? Java Basics - Anfänger-Themen 3
C Wiederholung von try-catch Java Basics - Anfänger-Themen 3
N try and catch block in finally Java Basics - Anfänger-Themen 8
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
B Exception vor catch Block definieren Java Basics - Anfänger-Themen 9
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
V Was ist ein Try-Catch Block Java Basics - Anfänger-Themen 4
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
A try catch UNREACHABLE CODE Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben