# Frage zu File schließen



## Lehtis (12. Januar 2012)

Hallo,
man sollte ja jedes File immer schließen, doch was ist wenn z.B.:

File f = new file("test.txt");
FileInputStream fi = new FileInputStream(f);
BufferdReader br = new BufferdReader(fi);

Genügt es hier wenn ich br.close() mache oder muss ich alle 3 schließen?


----------



## vfl_freak (12. Januar 2012)

Moin,

das sollte reichen - siehe hier:
http://www.etp.physik.uni-muenchen.de/kurs/Computing/java/node43.html

"file" kennt eh' kein close ....

Gruß
Klaus


----------



## Lehtis (12. Januar 2012)

Stimmt file hat gar kein close^^
Und dankem also war das eh richtig das ich nur br.close() gemacht habe.


----------



## slowfly (18. Januar 2012)

vfl_freak hat gesagt.:


> http://www.etp.physik.uni-muenchen.de/kurs/Computing/java/node43.html




```
int ch;
   try {
       BufferedReader in = new BufferedReader (
                              new FileReader ("filename.txt") );
       try {
           while( (ch = in.read()) != -1 ) {
               // do something ...
           }
           in.close();
       } catch (IOException e) {
           System.out.println("Read error " + e);
       }
   } 
   catch (IOException e) {
       System.out.println("Open error " + e);
   }
```
Da wurde ein sehr fataler Fehler gemacht =( -> also ich muss schon sagen, für einen Link von einer Uni fast schon peinlich.
Das alles funktioniert prinzipiell schon, nur müssen die Ressourcen jeweils in einem finally block geschlossen werden. Denn wenn VOR dem in/outputstream.close eine Exception geworfen wird, werden die Streams nämlich nicht! geschlossen... 

Guggst du hier:
http://docs.oracle.com/javase/tutorial/essential/io/bytestreams.html


> Closing a stream when it's no longer needed is very important — so important that CopyBytes uses a finally block to guarantee that both streams will be closed even if an error occurs. This practice helps avoid serious resource leaks.



Gruss
slowy


----------

