今更ではあるが、try~with~resources 文が便利で、ついうっかりこう書いてしまう。
File file = ....; try(PrintWriter pw = new PrintWriter(new BufferedWriter( new OutputStreamWriter( new FileOutputStream(file, file.exists()), "MS932")))){ }
これには罠があって、try() 文の中のコンストラクタでエラーが起こると、
リソース解放されないまま終わってしまう。
try( FileOutputStream out = new FileOutputStream(file, file.exists()); OutputStreamWriter ow = new OutputStreamWriter(out, "MS932"); BufferedWriter bw = new BufferedWriter(ow); PrintWriter pw = new PrintWriter(bw) ){ }
長くなって嫌でもリスク回避ではこうすべきなのだ。