Categories: Java

【Java入門】テキストファイルの内容を取得する方法

テキストファイルの内容をStream<String>として取得する方法

以下の例はFiles#linesを使用して、入力ファイルの中身を1行ずつ読み取る例です。
Files#linesを使用してテキストファイルの内容をStream<String>として取得すると、ストリームAPIを用いて処理することが出来るようになります。
1行ずつ読み取るため、メモリ使用量を抑えることが出来ます。

Java

public static void main(String args[]){
    try(Stream<String> stream = Files.lines(Paths.get("C:\\workspace\\sample\\textA.txt"))){
        stream.forEach(System.out::println);
    }catch(IOException e) {
        e.printStackTrace();
    }
}

実行結果

1行目のテキスト
2行目のテキスト
3行目のテキスト

文字コードを指定したい場合

ファイルの中身を1行ずつ読み取る際に文字コードを指定して実行したい場合はFiles#lLinesの第二引数にCharset型をセットします。

Java

Charset cs = Charset.forName("UTF-8");
Stream<String> stream = Files.lines(Paths.get("C:\\workspace\\sample\\textA.txt"), cs)

テキストファイルの内容をList<String>として取得する方法

以下の例はFiles#readAllLinesを使用して、ファイルの中身を一括して読み取る例です。
Files#readAllLinesを使用すると、テキストファイルの内容をList<String>としてまとめて取得できます。

Java

public static void main(String args[]){
    try {
        List<String> list = Files.readAllLines(Paths.get("C:\\workspace\\sample\\textA.txt"));

        for(String s:list){
            System.out.println(s);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

実行結果はStream<String>のときと同じです。

実行結果

1行目のテキスト
2行目のテキスト
3行目のテキスト

ストリーム操作を行いたい場合は、以下のように.stream()から続けることが可能です。

Java

public static void main(String args[]){
    try {
        Files.readAllLines(Paths.get("C:\\workspace\\sample\\textA.txt"))
            .stream().forEach(System.out::println);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

文字コードを指定したい場合

文字コードを指定して実行したい場合はFiles#readAllLinesの第二引数にCharset型をセットします。

Java

Charset cs = Charset.forName("UTF-8");
Files.readAllLines(Paths.get("C:\\workspace\\sample\\textA.txt"),cs)

List<String>で受け取った結果をストリーム操作して再びList<String>型に戻す方法

ストリーム操作した後に再度List<String>型に戻すには、
終端操作として.collect(Collectors.toList())を実行します。
以下の例は、ストリーム操作して末尾に「です。」を付与して、再度List<String>型に戻しています。

Java

public static void main(String args[]){
    try {
        List<String> list = Files.readAllLines(Paths.get("C:\\workspace\\sample\\textA.txt"))
            .stream()
            .map(s -> s + "です。")
            .collect(Collectors.toList());

        for(String s:list){
            System.out.println(s);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

実行結果

1行目のテキストです。
2行目のテキストです。
3行目のテキストです。

以上で記事の解説はお終い!

もっとJavaやSpringを勉強したい方にはUdemyがオススメ!同僚に差をつけよう!

issiki_wp