如何使用 Files.lines(...) 读取文件。forEach(...)?
2022-09-02 02:31:41
我目前正在尝试从我拥有的纯文本文件中读取行。我发现在另一个stackoverflow(在Java中读取纯文本文件)上,您可以使用Files.lines(..)。forEach(..)但是,我实际上无法弄清楚如何使用每个函数逐行读取文本,任何人都知道在哪里查找或如何执行此操作?
我目前正在尝试从我拥有的纯文本文件中读取行。我发现在另一个stackoverflow(在Java中读取纯文本文件)上,您可以使用Files.lines(..)。forEach(..)但是,我实际上无法弄清楚如何使用每个函数逐行读取文本,任何人都知道在哪里查找或如何执行此操作?
测试样品内容.txt
Hello
Stack
Over
Flow
com
使用 和 方法从此文本文件中读取的代码。lines()
forEach()
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;
public class FileLambda {
public static void main(String args[]) {
Path path = Paths.of("/root/test.txt");
try (Stream<String> lines = Files.lines(path)) {
lines.forEach(s -> System.out.println(s));
} catch (IOException ex) {
// do something or re-throw...
}
}
}
避免返回包含以下内容的列表:
List<String> lines = Files.readAllLines(path); //WARN
请注意,在调用时将读取整个文件,生成的 String 数组会一次将文件的所有内容存储在内存中。因此,如果文件非常大,您可能会遇到尝试将其全部加载到内存中的情况。Files::readAllLines
OutOfMemoryError
改用流:使用返回对象且不会遇到相同问题的方法。文件的内容被懒惰地读取和处理,这意味着在任何给定时间,只有一小部分文件存储在内存中。Files.lines(Path)
Stream<String>
Files.lines(path).forEach(System.out::println);