openしたらcloseを忘れないようにしましょう

Rubyだと

File.open("hoge.txt", "w") {|file|...}

のようにやっておけばcloseして片づけてくれます。後片付けがきちんとできない人間にも安心ですね。

ところで、clojureのjsonライブラリを使っていたのですが、書き出すときにハッシュの終わりが閉じていないという事例が発生。ライブラリ側とかを疑ってみたりしたけど、最終的にはFileWriterオブジェクトをcloseしていないというアホなことが原因でした。上のRubyのように終わったら後片付けしてくれるように書けばよいのですが、closeでも似たようなことができる。

(with-open [w (java.io.FileWriter. (str base-dir "/filtered_docs/all.json"))]
      (json/encode-to-writer result w))

FileReaderでも同じような感じでできるので、使うときは上のをやるように習慣付けるようにしたほうがいいですね。