阅读文本文件最简洁的方法&处理每一行

时间:2016-10-27 21:26:02

标签: java list file object stream

我目前正在研究Java。我对如何以最有效的方式阅读文本文件感兴趣。我读过可以使用一个Stream对象(在这个上下文中是“对象”吗?)来做到这一点并且已经给它一个镜头。我可以使用以下代码打印出文本文档中的每一行:

private static void ReadFile(String filePath) {
    Stream<String> readFileStream = null;
    try {
        readFileStream = Files.lines(Paths.get(filePath));

    } catch (IOException e) {
        e.printStackTrace();
    }
    readFileStream.forEach(System.out::println);
}

我想用每一行做点什么。例如,我想在我的文本文档中放入一堆名称,并为每个名称打印Java“Hello,NAME”。我怎么做?如何单独访问一行,是否必须先将列表放入数组中以便迭代它?

说我们创建了一个名为readFileStream的Stream对象是否正确?我想确保我的术语是正确的。而且,为什么我们在Stream之后添加?我知道&lt;&gt;用于列表,但在这种情况下我不理解它们。

提前致谢。

4 个答案:

答案 0 :(得分:2)

单独访问这些行很简单:你只需要解释这个表达式:readFileStream.forEach(System.out::println);

把它变成类似的东西:

readFileStream.forEach( line -> {
            System.out.println(line.toUpperCase());
        });

在我的插图中,我将每一行转为大写。一旦单独拥有该行,您就可以进行各种处理。

答案 1 :(得分:1)

这将一次读取一行

    File file = new File("text.txt");

    try(BufferedReader br = new BufferedReader(new FileReader(file))){
        String line;
        while((line = br.readLine())!=null){
            System.out.println(line);
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

答案 2 :(得分:0)

Files.lines(Paths.get(filePath))
   .filter(line -> line.startsWith(“J“))
   .forEach(line -> System.out.printf(“Hello, %s%n“, line));

所以你几乎就在那里。阅读Streams。 流是一个单一的迭代,所以变量是多余的。 我添加了一个过滤,但也可以排序等等。

答案 3 :(得分:0)

Apache提供了一个很好的库: commons-io 。最新版本为2.5。

以下是它的maven依赖:

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.5</version>
</dependency>

这个库有很好的方法来读取文件。

检查此方法:

List<String> listOfLines = FileUtils.readLines(file, encoding);

它将文件读入String列表。