Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.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中将扫描字符串转换成流?_Java_Java 8_Java Stream - Fatal编程技术网

如何在Java中将扫描字符串转换成流?

如何在Java中将扫描字符串转换成流?,java,java-8,java-stream,Java,Java 8,Java Stream,在Java8中,如何从扫描仪读取结果中形成字符串的流 InputStream is = A.class.getResourceAsStream("data.txt"); Scanner scanner = new Scanner(new BufferedInputStream(is), "UTF-8"); while (scanner.hasNextLine()) { System.out.println(scanner.nextLine()); } 也就是说,将一个扫描仪转换为一个流

Java8
中,如何从扫描仪读取结果中形成
字符串的

InputStream is = A.class.getResourceAsStream("data.txt");
Scanner scanner = new Scanner(new BufferedInputStream(is), "UTF-8");
while (scanner.hasNextLine()) {
    System.out.println(scanner.nextLine());
}

也就是说,将一个扫描仪转换为一个流,我想使用
forEach

对其进行迭代。您的做法完全错误,不需要
扫描仪

try (final InputStream is = A.class.getResourceAsStream("data.txt");
        final Reader r = new InputStreamReader(is, StandardCharsets.UTF_8);
        final BufferedReader br = new BufferedReader(r);
        final Stream<String> lines = br.lines()) {

}

另外,你似乎也没有关闭资源始终关闭
输入流

您根本不需要创建
扫描仪
。只需将资源作为
URL

URL url = A.class.getResource("data.txt");
Files.lines(Paths.get(url.getPath())).forEach(line -> {});

你到底想做什么?不可能以您想要的方式拥有字符串流。@Radiodef具体如何?@boristeider
Scanner实现迭代器
。所以答案是一样的。(制作一个
Spliterator
并使用
StreamSupport
)@Radiodef。你是对的。如果它在类路径上,这将不起作用。@Boristespider哦,是的,我想如果它是一个JAR,它将不起作用。我对
Files.readAllBytes(path.get(…)的说法正确吗
读取整个文件,而Files.lines建立了一个流,这样我就不会读取整个文件-所以懒散会起作用吗?@StephanRozinsky根据文档,是的。
文件。lines
使用
缓冲读取器
,因此它不会逐行读取实际的文件。是以惰性方式实例化的
还是
br.行
读取所有行?@StephanRozinsky它是一个
。你认为呢?我认为这与使用
文件的答案类似。下面的行
,只有在使用
forEach
时,才能读取整个文件。“我正在学习这些东西,所以还没有信心。”斯蒂芬罗津斯基说得对。在Java 8中,每个
流都是惰性的。每个对象(InputStream、Reader、BufferedReader)的声明是否都是单独的,以确保try with resources会清除每个对象?
URL url = A.class.getResource("data.txt");
Files.lines(Paths.get(url.getPath())).forEach(line -> {});