A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public void write(String filepath){
try{
String encoding = "GBK";
File f=new File(filepath);
if(f.isFile()&&f.exists()){
   BufferedWriter bw=new BufferedWriter(new FileWriter(f,false));
   for(int i=0;i<commoditylist.size();i++){
       bw.write(getInfo(commoditylist.get(i))+"\r\n");
       bw.close();
   }
}else{
f.createNewFile();
}
}catch(Exception e){
e.printStackTrace();
}
  }
这是代码,哪里有问题了呀


下面是报错信息:
java.io.IOException: Stream closed
at java.io.BufferedWriter.ensureOpen(Unknown Source)
at java.io.BufferedWriter.write(Unknown Source)
at java.io.Writer.write(Unknown Source)
at CommodityManage.write(CommodityManage.java:86)
at CommodityManage.add(CommodityManage.java:25)
at Command.analyse(Command.java:14)
at Server.main(Server.java:24)

然后我同学告诉我原因是:bw.close()调用不应该在for循环中;
不明白为什么这个地方不能用bw.close()调用语句呢?????

11 个回复

正序浏览
涨知识了,确实你的的流关时机不对
回复 使用道具 举报
水龙头只能被关一次,更何况,你在循环体中关闭流。第一次读取后就被关了,下次循环的时候再读取就会抛出IOException
文档中对于close()的说明:
关闭该流并释放与之关联的所有资源。在关闭该流后,再调用 read()、ready()、mark()、reset() 或 skip() 将抛出 IOException。关闭以前关闭的流无效。
回复 使用道具 举报
qinrh 中级黑马 2015-4-28 19:10:29
10#
你太早关闭资源了,还没有用完就给关掉了。。。系统就不能继续用资源了
回复 使用道具 举报
又长知识了
回复 使用道具 举报
流资源关闭不应该在循环中
回复 使用道具 举报
silencer 发表于 2015-4-27 13:40
流使用结束后再关闭,在for循环中一直在使用,所以不能关闭

搞明白了,谢谢
回复 使用道具 举报
Ray丶少年 发表于 2015-4-27 11:20
没循环一次你都在关流,这个操作是不行的

明白了,谢谢
回复 使用道具 举报
流使用结束后再关闭,在for循环中一直在使用,所以不能关闭
回复 使用道具 举报
Ray丶少年 发表于 2015-4-27 11:20
没循环一次你都在关流,这个操作是不行的

飞哥讲的有道理,你只开了一次流,但是你关闭了n多次,有点不合理。水龙头你都关掉了你还一直关它干啥?
回复 使用道具 举报
没循环一次你都在关流,这个操作是不行的
回复 使用道具 举报
因为你的流已经关闭了,不能再进行后续操作
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马