Java 8 Stream按行读取文件

作者 | 2020年4月13日

在Java8中,你可以使用Files.lines来实现以Stream的方式按行读取文件。

我们先准备一个用于测试的文件。

c:/lines.txt

line1
line2
line3
line4
line5

1. 使用Stream读取文件

TestReadFile.java

package com.mkyong.java8;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Stream;

public class TestReadFile {

    public static void main(String args[]) {

        String fileName = "c://lines.txt";

        //read file into stream, try-with-resources
        try (Stream<String> stream = Files.lines(Paths.get(fileName))) {

            stream.forEach(System.out::println);

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

输出

line1
line2
line3
line4
line5

2. 进行额外的操作

下面,我们使用filter()方法排除掉line3,并使用map()方法把所有行都转为大写。

package com.mkyong.java8;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class TestReadFile2 {

    public static void main(String args[]) {

        String fileName = "c://lines.txt";
        List<String> list = new ArrayList<>();

        try (Stream<String> stream = Files.lines(Paths.get(fileName))) {

            //1. 排除掉 line 3
            //2. 转为大写
            //3. Stream转为List
            list = stream
                    .filter(line -> !line.startsWith("line3"))
                    .map(String::toUpperCase)
                    .collect(Collectors.toList());

        } catch (IOException e) {
            e.printStackTrace();
        }

        list.forEach(System.out::println);

    }

}

输出

line1
line2
line3
line4
line5

发表评论

电子邮件地址不会被公开。 必填项已用*标注