Java 如何从具有files.lines(…).forEach(…)的文件中读取?
我目前正在尝试从我拥有的纯文本文件中读取行。我在另一个stackoverflow()上发现可以使用Files.lines(..).forEach(..) 但是,我实际上不知道如何使用for each函数逐行读取文本,有人知道在哪里查找或如何查找吗?需要一个Java 如何从具有files.lines(…).forEach(…)的文件中读取?,java,file,foreach,filereader,line-by-line,Java,File,Foreach,Filereader,Line By Line,我目前正在尝试从我拥有的纯文本文件中读取行。我在另一个stackoverflow()上发现可以使用Files.lines(..).forEach(..) 但是,我实际上不知道如何使用for each函数逐行读取文本,有人知道在哪里查找或如何查找吗?需要一个路径参数并返回一个流。需要一个使用者参数。因此,调用该方法,并向其传递一个。必须实现该对象才能为每一行执行您想要的操作 这是Java 8,因此您可以使用lambda表达式或方法引用来提供使用者参数。test.txt的示例内容 你好 堆栈 结束
路径
参数并返回一个流
。需要一个使用者
参数。因此,调用该方法,并向其传递一个。必须实现该对象才能为每一行执行您想要的操作
这是Java 8,因此您可以使用lambda表达式或方法引用来提供
使用者
参数。test.txt的示例内容
你好
堆栈
结束
流动
通用域名格式
使用lines()
和forEach()方法从该文本文件读取的代码
import java.io.IOException;
导入java.nio.file.Files;
导入java.nio.file.Path;
导入java.nio.file.path;
导入java.util.stream.stream;
公共类FileLambda{
公共静态void main(字符串JavaLatte[]{
Path Path=Path.get(“/root/test.txt”);
try(流行=文件。行(路径)){
lines.forEach->System.out.println;
}捕获(IOEX异常){
//做点什么或者重新扔。。。
}
}
}
使用Java 8,如果文件存在于类路径中
:
Files.lines(Paths.get(ClassLoader.getSystemResource("input.txt")
.toURI())).forEach(System.out::println);
我已经创建了一个示例,可以使用流进行过滤/
public class ReadFileLines {
public static void main(String[] args) throws IOException {
Stream<String> lines = Files.lines(Paths.get("C:/SelfStudy/Input.txt"));
// System.out.println(lines.filter(str -> str.contains("SELECT")).count());
//Stream gets closed once you have run the count method.
System.out.println(lines.parallel().filter(str -> str.contains("Delete")).count());
}
}
避免返回包含以下内容的列表:
List<String> lines = Files.readAllLines(path); //WARN
该方法已经在读取文件的每一行,您可以将该行存储在字符串中
变量中,并使用它执行其他操作…嗯,您应该了解Java 8和lambdas;特别是在这里,关于消费者
和单一抽象方法的概念,您可以使用方法引用:System.out::println
,但它仍然会被转换为相同的字节码。还有一点:您不应该将流
存储为变量,因为它可能会让一些读者混淆使用它两次或多次,这是禁止的。相反,您可以使用readAllLines
将其保存到List
,然后在此列表上使用方法stream()
。使用try with resources确保流自动关闭:try(stream lines=Files.lines(path)){
@DmitryGinzburg您会将流作为变量存储在对readAllLines
来说太大的文件中吗?请不要在生产代码中编写这样的空catch块。我有一个疑问。files.lines()会返回每行的流还是返回整个文件中的流?请澄清。“将文件中的所有行作为流读取。”
List<String> lines = Files.readAllLines(path); //WARN
Files.lines(path).forEach(System.out::println);