Blog

InputStream から行単位でファイルを読み出したい時

Java 8 では、BufferedReader#lines が定義されているのでこれを利用する。 BufferedReader#lines は、Stream を返すので、そのまま stream 処理を書けば良い。

try (final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8))) {
    bufferedReader.lines().map(String::trim)
        .forEach(System.out::println);
}

ごちゃごちゃと記述が必要だが、通常だとグローバル変数でやっていたり暗黙のうちに処理されている部分を手で書いているだけなのでたいしたもんだいではない。

文字コードは VM のデフォルト文字列を利用すれば記述を省略することが可能だが、グローバル変数に頼ったコーディングは後々身を滅ぼすことであろう。

見た感じ、InputStreamReader#close を呼んでいる部分が無くて不安になるかもしれないが、BufferedReader#close が呼んでいるので問題ない。

このあたり駆使していけば、Java 8 でも意外とスクリプト書きやすくなってくる。