try-with-resource を使え
reader.closeでヌルポ
例外メッセはわかるが発生箇所がわからん(例外オブジェを渡してスタック表示できん?)
ログレベルがシステム停止を指すと思われるのに処理が続行されている
詳細化(第一弾)
java
1BufferedReader reader = null;
2try {
3 reader = new BufferedReader(new FileReader(file));
4 String line;
5 while ((line = reader.readLine()) != null) {
6 // ...
7 }
8} catch (IOException e) {
9 // exit を行わないので warn レベル以下とすべきである
10 // 例外情報は ログフォーマットにて制御させるため渡す必要あり
11 // ここ以外は多分許容されただけだと思われる。
12 // また ログレベルに関しては適切なものを選んでください。
13 log(Level.WARNING, e.getMessage(), e);
14} finally {
15 try {
16 // NullPointerException は発生しても握りつぶすのではなく
17 // 発生しないように対策をする。(例外コスト削減)
18 if (reader != null) reader.close();
19 } catch (IOException e) { // 無視する例外は IOException だけと明示する
20 // nop // 処理を入れてないことを明示する
21 }
22}
あたりになるでしょう。
また [try-with-resource ] をりようすると
java
1try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
2 String line;
3 while ((line = reader.readLine()) != null) {
4 // ...
5 }
6} catch (IOException e) {
7 log(Level.WARNING, e.getMessage(), e);
8}
で上記コードとほぼ同一になります。