如何在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具体如何?@boristeiderScanner实现迭代器
。所以答案是一样的。(制作一个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 -> {});