ストリームは一度 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 文を忘れないように。