Frage zu File schließen

Lehtis

Grünschnabel
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?
 

Code:
  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
 
Zurück