Wann soll ich den Stream schließen, wenn ich das in einer Methode habe?

berserkerdq2

Bekanntes Mitglied
Hi, ich habe eine Methode, der ich einen Pfad übergebe und die dann den Pfad einliest und mit diesem arbeitet.

Mein Problem ist nun, wenn ich in der Methode den reader close, so kann ich die Methode nicht verwenden, da ich die IOexception erhalte, dass der stream geschlossen ist.

Wenn ich es nicht schließe klappt es, aber soll ich nun durchgehend den Stream geöffnet lassen, dass ist ja auch blöd, gibts da eine Möglichkeit?
 
Beste Antwort
Achso, wenn ich einen catch habe, schließt es sich automatisch?
Bei try with resources: Ja. Aber bei einem einfachen try / catch Block passiert nichts, was da nicht explizit an Code steht. Da wäre also der korrekte Code (dem dieses try with resources auch entspricht):
Java:
public static String[] test(String optimal){
    BufferedReader nummerEins;
    try{
        nummerEins = new BufferedReader(new FileReader(optimal));
        ...
    }catch (IOException e){
        e.printStackTracke();
    } finally {
        try {
            if (nummerEins != null) nummerEins.close();
        } catch (Exception ex) {}
    }
}

Hier wird immer geschlossen - egal ob eine Exception auftritt oder nicht. Und wenn dabei eine Exception auftritt...

KonradN

Super-Moderator
Mitarbeiter
Liefere da doch bitte erst einmal mehr Details.

Generell schliesst Du nur Dinge, die "Dir gehören". Also wenn Du etwas von außen bekommst, dann lässt Du es offen. Eine Methode, die einen Stream bekommt, schließt diesen nicht.

Problematisch ist es bei verschachtelten Aufbau. Bestes Beispiel ist der Scanner auf System.in. Der Scanner gehört Dir, denn den hast du ja erstellt, aber das Schließen des Scanners schliesst auch den zugrunde liegenden Stream.
 

berserkerdq2

Bekanntes Mitglied
[CODE lang="java" title="BeispielCode"]public static String[] test(String optimal){
try{
BufferedReader nummerEins = new BufferedReader(new FileReader(optimal));
...
nummerEins.close() // Wenn ich hier jetzt close habe, kann ich optimal nicht mehr da bei Filereader reintun
}catch (IOException e){
e.printStackTracke();
}
}[/CODE]

Java:
test("Testpath"); //Jetzt würde eine Fehlermeldung kommen, dass der Stream geschlossen ist.
Mein Problem ist nur, soll ich das dann gar`nicht schließen?

(Habe jetzt natürlich den Code nicht vollständig, theoretisch müsste da noch ein Rückgabewert hin, aber mein Problem ist nur das close, wenn ich das setze, kann ich die Methode nicht mehr verwenden, da Stream geschlossen ist.
 

KonradN

Super-Moderator
Mitarbeiter
Also erst einmal solltest Du direkt try with resources verwenden:
Java:
public static String[] test(String optimal){
    try(BufferedReader nummerEins = new BufferedReader(new FileReader(optimal))) {
        ...
    }catch (IOException e){
        e.printStackTracke();
    }
}

Damit wird das automatisch geschlossen. Und da ist auch nichts offen zu halten - das ist ja eine lokale Variable die außerhalb des Blockes nicht mehr existiert!
 

berserkerdq2

Bekanntes Mitglied
Also erst einmal solltest Du direkt try with resources verwenden:
Java:
public static String[] test(String optimal){
    try(BufferedReader nummerEins = new BufferedReader(new FileReader(optimal))) {
        ...
    }catch (IOException e){
        e.printStackTracke();
    }
}

Damit wird das automatisch geschlossen. Und da ist auch nichts offen zu halten - das ist ja eine lokale Variable die außerhalb des Blockes nicht mehr existiert!
Achso, wenn ich einen catch habe, schließt es sich automatisch?
 

KonradN

Super-Moderator
Mitarbeiter
Achso, wenn ich einen catch habe, schließt es sich automatisch?
Bei try with resources: Ja. Aber bei einem einfachen try / catch Block passiert nichts, was da nicht explizit an Code steht. Da wäre also der korrekte Code (dem dieses try with resources auch entspricht):
Java:
public static String[] test(String optimal){
    BufferedReader nummerEins;
    try{
        nummerEins = new BufferedReader(new FileReader(optimal));
        ...
    }catch (IOException e){
        e.printStackTracke();
    } finally {
        try {
            if (nummerEins != null) nummerEins.close();
        } catch (Exception ex) {}
    }
}

Hier wird immer geschlossen - egal ob eine Exception auftritt oder nicht. Und wenn dabei eine Exception auftritt, dann wird diese ignoriert.
 
Beste Antwort

berserkerdq2

Bekanntes Mitglied
Bei try with resources: Ja. Aber bei einem einfachen try / catch Block passiert nichts, was da nicht explizit an Code steht. Da wäre also der korrekte Code (dem dieses try with resources auch entspricht):
Java:
public static String[] test(String optimal){
    BufferedReader nummerEins;
    try{
        nummerEins = new BufferedReader(new FileReader(optimal));
        ...
    }catch (IOException e){
        e.printStackTracke();
    } finally {
        try {
            if (nummerEins != null) nummerEins.close();
        } catch (Exception ex) {}
    }
}

Hier wird immer geschlossen - egal ob eine Exception auftritt oder nicht. Und wenn dabei eine Exception auftritt, dann wird diese ignoriert.
Noch eine kurze Frage, wie sieht das bei einem Writer aus? Wenn ich z. B. selber eine Datei im resource Ordner erstelle, dann muss ich immer closen oder? Zumindest ist bei mir dann nur die Datei da, aber da steht nichts, wenn ich beim writer nicht close.
 

KonradN

Super-Moderator
Mitarbeiter
Alles, was von AutoClosable erbst, solltest Du schließen. Das ist auch bei einem Writer der Fall. Und auch da in der Regel einfach mit einem Try with Resources - da ist sicher gestellt, dass dieser auch geschlossen wird.

Wenn du eine Instanzvariable hast, die AutoClosable ist, dann sollte die Klasse auch AutoClosable erben und damit die Methode close() anbieten, die dann die AutoClosable Variablen schließt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
KogoroMori21 Wann ist der richtige Zeitpunkt, um sich Hilfe zu suchen? (Bin Informatik-Student) Java Basics - Anfänger-Themen 10
I Logik Zahlungsprozess - Wann Bestellobjekt anlegen? Java Basics - Anfänger-Themen 2
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
berserkerdq2 Java streams, wann nutze ich ::, also 2x Doppelpuntk bei Streams? Java Basics - Anfänger-Themen 5
W Wann und warum hashcode und equals? Java Basics - Anfänger-Themen 14
W Wann Rückgabewerte 0, 1, -1? Java Basics - Anfänger-Themen 27
K In andere Zahlensysteme umwandeln, wann klappt immer der Trick mit log? Java Basics - Anfänger-Themen 6
W Zur Vererbung: Wann und wie? Java Basics - Anfänger-Themen 35
F Wann ist es eine Instanz und wann nicht? Java Basics - Anfänger-Themen 1
C Instanzen, wann muss ich Instanzen erzeugen & wo?) Java Basics - Anfänger-Themen 23
S Wann Methode abstract? Java Basics - Anfänger-Themen 10
S Wann buffer löschen? Java Basics - Anfänger-Themen 5
R Wie überprüfen wann der User online oder offline ist? Java Basics - Anfänger-Themen 5
C Polymorphie Was genau ist Polymorphie und wann genau sollte man es verwenden? Java Basics - Anfänger-Themen 9
I Wann ist Client plattformunabhängig? Java Basics - Anfänger-Themen 22
M Best Practice Wann eine Methode schreiben ? Java Basics - Anfänger-Themen 14
K Warum funktioniert das und wann erden die Objektmethoden nun ausgeführt? Java Basics - Anfänger-Themen 7
IngoF Welches Event kommt wann? Java Basics - Anfänger-Themen 8
M Wann eigene implementierte HashCode Methode zwingend erforderlich? Java Basics - Anfänger-Themen 1
X Wann schreibt man diese Syntax zeichen { } Java Basics - Anfänger-Themen 8
O Wann nutzt man static? Java Basics - Anfänger-Themen 19
C Klassendesign / Wann Interface implementieren und wann Klassen vererben? Java Basics - Anfänger-Themen 3
S Wann existiert eine Instanz (eigene Klasse) Java Basics - Anfänger-Themen 8
M Wann PATH und wann JAVA_HOME in Windows System 7 setzen? Java Basics - Anfänger-Themen 2
M Wann final verwenden? Java Basics - Anfänger-Themen 5
M Wann eine Wrapper Klasse verwenden und wann einen primitiven Datentypen? Java Basics - Anfänger-Themen 8
D Ab wann getter und setter Java Basics - Anfänger-Themen 2
B Erkennen, wann static oder nicht? Java Basics - Anfänger-Themen 7
E wann welche Konstanten verwenden? Java Basics - Anfänger-Themen 7
P Wann Byte-Stream und wann Character-Stream? Java Basics - Anfänger-Themen 11
T Vererbung Wann wird die Methode paint aufgerufen? Java Basics - Anfänger-Themen 4
M Wann statische Methoden/Attribute? Java Basics - Anfänger-Themen 2
vandread Java Wildcards - Wann super wann extends? Java Basics - Anfänger-Themen 2
K Wann Vererbung und wann Interface verwenden? Java Basics - Anfänger-Themen 12
D Wann genau nutze ich ein solches Interface? Java Basics - Anfänger-Themen 3
K Wann genau brauche ich die Anweisung gleich null? Java Basics - Anfänger-Themen 10
B Wann toString() überschreiben? Java Basics - Anfänger-Themen 21
S OOP Wann Proxies und Interfaces? Java Basics - Anfänger-Themen 3
P Threads Wann läuft es parallel ab ? Java Basics - Anfänger-Themen 4
C Variablen Wann werden Instanzvariablen initalisiert? Java Basics - Anfänger-Themen 10
P Java Stream, wann welche Stream verwenden? Java Basics - Anfänger-Themen 3
T Ab wann ist es ein großes Projekt? Java Basics - Anfänger-Themen 35
N Bessere Performance durch final: wann denn überhaupt? Java Basics - Anfänger-Themen 28
D Wann genau abstrakte Klasse und wann ein Interface verwenden? Java Basics - Anfänger-Themen 4
W Wann nutze ich "import"? Java Basics - Anfänger-Themen 12
A junit test wann verwendet man "was"? Java Basics - Anfänger-Themen 4
H Wann ein Objekt der Programmklasse in main anlegen Java Basics - Anfänger-Themen 2
G Wann ist ein == Vergleich bei Gleitkommazahlen fahrlässig? Java Basics - Anfänger-Themen 8
T Wann for und wann while?? Java Basics - Anfänger-Themen 35
-horn- Wann wird alles NaN erzeugt? Java Basics - Anfänger-Themen 22
S Wann wird eine Klasse geladen? Java Basics - Anfänger-Themen 17
C this - wann verwende ich das? Java Basics - Anfänger-Themen 10
T Threads - Ab wann wirds Kritisch?! Java Basics - Anfänger-Themen 7
M Wann muss man eine Variable mit set-/get-Methoden in eine Bean schreiben? Java Basics - Anfänger-Themen 19
G field public/private wann Java Basics - Anfänger-Themen 11
GambaJo Ab wann neue Klasse erzeugen? Java Basics - Anfänger-Themen 2
G Wann Arrays, wann Collections? Java Basics - Anfänger-Themen 36
GambaJo Wann try.catch nutzen? Java Basics - Anfänger-Themen 11
B objekt wann als final deklarieren? Java Basics - Anfänger-Themen 2
N Wann muss eine Methode - protected sein wann public wann. Java Basics - Anfänger-Themen 5
Y Wann / Wozu inner class Java Basics - Anfänger-Themen 3
K StringBuilder notwendig ab wann? Java Basics - Anfänger-Themen 42
S wann static Funktionen wann nicht Java Basics - Anfänger-Themen 6
N Wann und wie oft finalize Methode verwenden( überschreiben ) Java Basics - Anfänger-Themen 6
Bernasconi Programmierstil / Wann eine neue Datei? Java Basics - Anfänger-Themen 5
M wann, welche schleife Java Basics - Anfänger-Themen 3
M Ab wann ist die Datei sichtbar? Java Basics - Anfänger-Themen 3
G Herausfinden, wann mehrere Threads abgeschlossen sind Java Basics - Anfänger-Themen 3
G Überprüfen wann ein Dokument abläuft? Java Basics - Anfänger-Themen 3
N SAX, StAX, JDOM oder DOM , ab wann welches für XML Java Basics - Anfänger-Themen 14
M Wann ist ein Programm beendet? Java Basics - Anfänger-Themen 6
G Wann am besten getSize() aufrufen? Java Basics - Anfänger-Themen 6
I Festellen wann Methode in anderer Klasse fertig ist Java Basics - Anfänger-Themen 5
M wann statische klassen? Java Basics - Anfänger-Themen 14
M Wann ist initialisieren sinnvoll? Java Basics - Anfänger-Themen 4
B Wann Comparator und wann Comparable Java Basics - Anfänger-Themen 6
R Wann benutzt man << oder >> ? Java Basics - Anfänger-Themen 2
G Klassen: Wann initialisiere ich wo meine Variabeln Java Basics - Anfänger-Themen 6
Ü Methode soll Quadrat aus der Summer zurückgeben Java Basics - Anfänger-Themen 10
DrahtEck Schleife soll wieder da anfangen wo ich es möchte ! Java Basics - Anfänger-Themen 17
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
Com.Roter Wie soll ich lernen? Java Basics - Anfänger-Themen 17
T code so schreiben das er von sich selber anpasst (code soll die anzahl aller bustaben bestimmen) Java Basics - Anfänger-Themen 16
T float soll durch schleife die größte mögliche Zahl herausfinden, Ausgabe ist aber "Infinity" Java Basics - Anfänger-Themen 1
I aus 2 random zahlen soll nur die ungerade summe der beiden genommen werden. Java Basics - Anfänger-Themen 13
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
berserkerdq2 Warum soll ich shuffle nutzen, um bei Rückgabewert Collection eine Liste zurückzugeben? Java Basics - Anfänger-Themen 3
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
M Bei nach oben scrollen soll Seite aktualisiert werden (Userscript mit Javascript) Java Basics - Anfänger-Themen 10
R App soll selbstständig reagieren, anstatt via Models Java Basics - Anfänger-Themen 0
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
C Ein Algorithmus soll schneller werden Java Basics - Anfänger-Themen 24
K Ein Objekt Auto kennt den Inhalt seines links und rechtsstehenden Autos, wie soll man das ermöglichen Java Basics - Anfänger-Themen 2
HeiTim Brauche Hilfe soll ein nummeriertes Feld ausgeben lassen Java Basics - Anfänger-Themen 17
O Ich habe einen String und soll mit matches schauen, ob ein Buchstabe zu einer geraden ANzahl im String vorkommt, wie soll das gehen? Java Basics - Anfänger-Themen 7
O Ich ahbe einen char und diesen soll ich bei .matches prüfen, also ob der char in meiner Zeichenkette vorhanden ist, wie mache ich das? Java Basics - Anfänger-Themen 9
B Java Programm soll mit Python kommunizeren Java Basics - Anfänger-Themen 1
J Kreis soll die gleiche Fläche wie das Rechteck haben wie mache ich das? Java Basics - Anfänger-Themen 3
MichelNeedhelp Brauche zu diesem Labyrinth ein Skript? Der Hamster soll im Urzeigersinn das ganze Labyrinth abgehen und wieder an seinem Ursprungsplatz sein. Java Basics - Anfänger-Themen 40
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben