Files.lines を使おう。

Java で 有名なフレームワークを使った Webアプリ開発ばかりやっていると、
ファイルシステム上のテキストファイルを1行ずつ読込み処理するというものを作る機会は
案外、少ないもので、どうするんだっけ。。と思いだすまで数十秒かかってしまい自己嫌悪。。。

たいていは、BufferedReaderを使って、、

try(BufferedReader reader = new BufferedReader(new FileReader("/root/work/foo"))){
   String line;
   while((line = reader.readLine()) != null){
       // 1行分文字列 line を処理
   }
}catch(IOException ex){
   
}

このように書くけど。。。Java8 以降は、以下の書き方もあるんですね。

try{
   Files.lines(FileSystems.getDefault().getPath("", "/root/work/foo"), Charset.forName("UTF-8")).forEach(s->{
      // 1行分文字列 s を処理
   });
}catch(IOException ex){
   
}

1行しか差がないと嘆くことない!
Reader の IO だと、文字セット指定できないけど、Files.lines なら、文字セットを指定できる。