我目前正在研究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;用于列表,但在这种情况下我不理解它们。
提前致谢。
答案 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列表。