首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Java 8:处理文件的供应商抛出“流已经被操作或关闭”

Java 8:处理文件的供应商抛出“流已经被操作或关闭”
EN

Stack Overflow用户
提问于 2017-06-12 10:09:06
回答 2查看 2.2K关注 0票数 1

使用JUnitStream时,我有以下错误消息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java.lang.IllegalStateException: stream has already been operated upon or closed

我做了一项研究,很清楚,不可能重用流

与这篇文章一致:

使用Supplier是解决此问题的可能方法。

因此,我的当前代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    try (Stream<String> stream =  Files.lines(Paths.get(fileName)) ) {

        Supplier<Stream<String>> supplier = () -> stream;

        logger.info("A");
        logger.info("ABC {}", supplier.get().findFirst().get());
        logger.info("B");
        logger.info("XYZ {}", supplier.get().skip(1050).findFirst().get());
        logger.info("C");

        assertThat(supplier.get().count(), is(1051));

    }
    catch (IOException e) {
        logger.error("{}", e.getMessage());
    }

如何看到我使用supplier.get()处理Stream (与教程一致),但是@Test打印直到B,因此@Testsupplier.get().skip(1050).findFirst().get()中失败,并且仍然生成相同的错误消息。

我的代码和教程之间的唯一区别是,mime通过文件工作,而教程则围绕数组工作。

什么特别的编辑工作没有任何问题?

α

我做了下面的版本(根据Eugene的代码片段)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   try (Stream<String> stream =  Files.lines(Paths.get(fileName)) ) {

        Supplier<Stream<String>> supplier = () -> stream.collect(Collectors.toList()).stream();

        logger.info("A");
        logger.info("ABC {}", supplier.get().findFirst().get());
        logger.info("B");
        logger.info("XYZ {}", supplier.get().skip(1050).findFirst().get());
        logger.info("C");

        assertThat(supplier.get().count(), is(1051));

    }

同样的错误信息。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-12 10:15:11

Supplier并不神奇,你仍然需要从供应商那里提供一个新的流。

所以你可以:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Supplier<Stream<String>> supplier = () -> Files.lines(Paths.get(fileName));

但这意味着要一直读文件。您可以将所有行读入单个List中,并将其存储在内存中,并将其从stream中提取出来。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<String> allLines = Files.readAllLines(Paths.get(fileName));

Supplier<Stream<String>> supplier = () -> allLines.stream();

请注意,即使您所链接的教程也返回了一个新的流,它是通过Stream.of创建的,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 Supplier<Stream<String>> streamSupplier = () -> Stream.of(array);
票数 7
EN

Stack Overflow用户

发布于 2017-06-12 10:11:12

这是因为您的供应商总是提供相同的Stream实例,并且您已经使用了findFirst()。然后尝试使用findFirst()再次使用它,这是不允许的。

在本教程中,每次创建一个新的流。在您的示例中,您必须调用供应商内部的Files.lines()才能使其工作,尽管这意味着您每次都要重新读取该文件。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44506038

复制
相关文章
python json转字符串_在python中将json转换为字符串
一开始我没有清楚地解释我的问题。在python中将json转换为字符串时,请尝试使用str()和json.dumps()。
全栈程序员站长
2022/11/16
10.3K0
在 Python 中将一个 Legendre 系列添加到另一个 Legendre 系列
要将一个 Legendre 系列添加到另一个系列,请使用 Python 中的 polynomial.legendre.legadd() 方法 嘟嘟。该方法返回一个数组,表示其总和的勒让德系列。
很酷的站长
2023/02/23
5520
在 Python 中将一个 Legendre 系列添加到另一个 Legendre 系列
常用的JVM参数选项
栈 -Xss128k <==> -XX:ThreadStackSize=128k 设置线程栈的大小为128K
一个风轻云淡
2023/10/15
3430
常用的JVM参数选项
linux常用命令之文件管理默认情况选项参数注意用法选项用法选项用法参数注意用法选项用法选项注意用法选项注意
LS ls:list directory contents 默认情况 默认情况下显示的是mtime 选项 -a 列出全部文件及目录包括隐藏的 -l 列出详细信息,包括文件类型、权限、节点、owner、group、size(b)、修改日期、文件名 -d 列出目录本身,且不列出目录下的内容 -h size用易读的单位 表示,如kg -F 列出文件类型-S按大小从大到小排序 -t  按更新时间从新到旧排序 -r 以相反的顺序排序 -i 显示inode号码 –time=atime 显示访问时间 –time=ct
用户1174983
2018/02/05
2.6K0
jQuery 选项卡插件 FengTab by FungLeo
好无聊啊,权当练手,写了一个选项卡插件 Html 结构 <h2>Demo 1</h2> <div id="FengTab" class="FengTab"> <ul class="tab"> <li>Title 1</li> <li>Title 2</li> <li>Title 3</li> <li>Title 4</li> </ul> <div c
FungLeo
2022/11/28
1.3K0
jquery nicescroll 配置参数
jQuery滚动条插件兼容ie6+、手机、ipad http://www.areaaperta.com/nicescroll/ jQuery(function($){ $("#scrollInner").niceScroll({ touchbehavior:false, cursorcolor:"#398F70", cursoropacitymax:1, cursorwidth:5, cursorborder:
deepcc
2018/05/16
4.1K0
删除所选项(附加搜索部分的jquery)
1.视图端(views)的配置为: <script> $(document).ready(function() { $("#info-grid").kendoGrid({ dataSource: { type: "json",
wfaceboss
2019/04/08
9370
jquery ajax参数详解
type:boolean (默认: true) 默认设置下,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false。注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。
别团等shy哥发育
2023/02/25
2.5K0
python中将字符串转为json对象并
string =" {   "status": "error",   "messages": ["Could not find resource or operation 'BZK1.MapServer' on the system."],   "code": 404
py3study
2020/01/09
1.2K0
Shell脚本的参数和选项
Shell脚本是一种常用的自动化工具,用于编写各种任务和批处理脚本。Shell脚本支持参数和选项,可以让我们更灵活地控制脚本的行为。本文将详细介绍Shell脚本中的参数和选项,包括基本语法、使用方法和示例。
玖叁叁
2023/04/10
2.4K0
python中将 \\uxxxx转换为 Unicode字符串
今天碰到一个很有意思的问题,需要将普通的 Unicode字符串转换为 Unicode编码的字符串,如下:
渔父歌
2018/09/26
2.3K0
在Java中将ArrayList转换为Array
In this tutorial you will learn how to convert ArrayList to Array in Java.
用户7886150
2021/04/29
1.7K0
如何在Python中将列表转换为字符串?
Python provides different variable type for programmers usage. We can use int, float, string, list, set … data types in our applications. While using different type of variables we may need to convert then to different types. In this tutorial we will different type of conversion from list to string in Python.
全栈程序员站长
2022/08/12
4.5K0
如何在 Linux 中将目录添加到 PATH 变量,方便执行自定义命令
在开始之前,让我们先了解一下 PATH 变量的基本概念。PATH 变量是一个由冒号分隔的目录列表,系统将按照这个列表的顺序搜索可执行文件。当我们在终端输入一个命令时,系统会按照 PATH 变量中的目录顺序逐个搜索,直到找到与命令名称匹配的可执行文件或者搜索完所有的目录。
网络技术联盟站
2023/09/06
2.7K0
如何在 Linux 中将目录添加到 PATH 变量,方便执行自定义命令
jquery中ajax参数详解
title: $.ajax参数详解 date: 2017-04-08 15:25:57 tags: ajax categories: ajax
念念不忘
2019/03/29
2.1K0
如何在 Bash 中将字符串计算为数字?
当您尝试在 bash 中进行算术运算时,这会产生问题,您尝试添加的数字会给您带来奇怪的结果。
网络技术联盟站
2022/04/21
1.5K0
如何在 Bash 中将字符串计算为数字?
如何在 Linux 中将目录添加到 PATH 变量,方便执行自定义命令
在 Linux 系统中,PATH 变量是一个非常重要的环境变量,用于指定系统在执行命令时搜索可执行文件的路径。默认情况下,系统会在预定义的一组目录中查找可执行文件。但是,有时候我们可能需要将自定义的目录添加到 PATH 变量中,以便系统能够找到我们自己创建的可执行文件。在本文中,我们将学习如何在 Linux 中将目录添加到 PATH 变量,以便能够方便地执行自定义的命令。
网络技术联盟站
2023/06/09
2.5K0
如何在 Linux 中将目录添加到 PATH 变量,方便执行自定义命令
python中将字符串转为json对象并取值
"messages": ["Could not find resource or operation 'BZK1.MapServer' on the system."],
用户7886150
2021/01/16
2.2K0
如何在 JS 中将字符串切割成字符?
(10) ["D", "r", "a", "g", "o", "n", " ", "�", "�", " "]
酷酷的哀殿
2020/10/26
1.4K0
如何在 TypeScript 中将字符串转换为日期对象?
在应用程序中,我们经常需要将日期字符串转换为日期对象。在 TypeScript 中,由于类型系统的存在,这个过程可能需要一些额外的步骤。在本文中,我们将讨论如何在 TypeScript 中将字符串转换为日期对象,并解决在此过程中可能遇到的一些问题。
网络技术联盟站
2023/06/07
3.5K0

相似问题

Windows窗体和WCF服务

12

WCF请求来自windows窗体,而不是windows服务。

12

WCF:从服务内部访问windows窗体

22

WCF,从服务访问windows窗体控件

50

使用wcf服务Windows窗体应用程序

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文