Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从具有files.lines(…).forEach(…)的文件中读取?_Java_File_Foreach_Filereader_Line By Line - Fatal编程技术网

Java 如何从具有files.lines(…).forEach(…)的文件中读取?

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的示例内容 你好 堆栈 结束

我目前正在尝试从我拥有的纯文本文件中读取行。我在另一个stackoverflow()上发现可以使用Files.lines(..).forEach(..) 但是,我实际上不知道如何使用for each函数逐行读取文本,有人知道在哪里查找或如何查找吗?

需要一个
路径
参数并返回一个
。需要一个
使用者
参数。因此,调用该方法,并向其传递一个。必须实现该对象才能为每一行执行您想要的操作


这是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);