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"), StandardCharsets.UTF_8).forEach(s->{ // 1行分文字列 s を処理 }); }catch(IOException ex){ }
1行しか差がないと嘆くことない!
Reader の IO だと、文字セット指定できないけど、Files.lines なら、文字セットを指定できる。