ストリームは一度 close したら開けない

入出力ストリームは一度 close() メソッドで閉じてしまうと、そのプログラム内で再度オープンすることはできない。たとえば

BufferedReader br1 = new BufferedReader(new FileReader("file1.txt"));
...
br1.close();

BufferedReader br2 = new BufferedReader(new FileReader("file2.txt"));
String str;
while((str = br2.readLine()) != null) {
    ...
}

などとやってしまうと, br2.readLine() のところで IOException が発生する。このような場合は、一つの参照変数を使い回して、最後に close() するとよい。

BufferedReader br = null;

try {
    br = new BufferedReader(new FileReader("file1.txt"));
    ...
    br = new BufferedReader(new FileReader("file2.txt"));
    ...
} catch(FileNotFoundException e) {
    System.out.println("ファイルが見つかりません");
} catch(IOException ee) {
} finally {
    try {
        if(br != null) br.close();
    } catch(IOException e) {
    }
}

br が null のまま close しようとすると finally ブロックで NullPointerException が発生するので if 文を忘れないように。