java.nio.Files.list(Path)でリストアップしたらクローズしないといけない

java.nio.Files.list(Path)で指定したディレクトリ直下のファイルのパス一覧をStream<Path>型で取得できる

Stream<Path> paths = Files.list(Paths.get("/path/to/directory"));

このメソッドの戻り値をcloseしないとToo many open filesでエラーが発生するようになる。

java.nio.Files.list(Path)の戻り値をcloseする

Stream<T>インタフェースの親インタフェースBaseStream<T>は、さらに親がAutoClosableインタフェースなので try-with-resoucesで確実に閉じることができる。

try (Stream<Path> paths = Files.list(dir)) {
  // 処理
}

list以外の閉じ忘れに注意したいメソッド

InputStreamOutputStreamを作るメソッドであれば閉じ忘れることは無いが、 それ以外のメソッドはcloseが必要であることに気づきづらいので注意。

特に以下のメソッドもcloseが必要となる。

  • Files.walk
  • Files.find
  • Files.lines