Properties#load(InputStream)で悩む。
Propertiesでファイルから値を読み込む際、こーやってた。
例外は上位にスローする場合、1行で簡単に実装できたりする。
Properties prop = ・・・;
File file = ・・・;
prop.load(new FileInputStream(file));
でも、よーく見ると、Propertiesに渡しているInputStreamがcloseされていない。
Properties#loadの実装でも、InputStreamをcloseする処理はない。
んじゃー自分できちんとcloseすべきかというと、FileInputStreamは
finalizeでcloseする処理が実装されているので、ファイルをたくさん開く処理とか
ストリームを参照し続けるようなことがないならば、問題ないとも考えられる。
逆に、きちんと書くとすると・・・
すげーわかりにくい。
Properties prop = ・・・;
File file = ・・・;FileInputStream fis = null;
try {
fis = new FileInputStream(file);
prop.load(fis);
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
}
}
}
うーん。
でも、やっぱりちゃんとcloseすべきなんだろーなぁ。
あと、これと関連した問題でClass#getResourceAsStreamで取得したInputStreamは
きちんとcloseすべきなんだろーかとかいうのも疑問だったりする。
ついでに、リソースのcloseは、Jakarta Commons IOのIOUtils#closeQuietlyを使うと
ちょっとすっきりする。
まーこの程度のメソッドなら、自分で作ってもいいんだけどさ。