黑马程序员技术交流社区

标题: Java中的io流关闭问题---求助大神 [打印本页]

作者: 真正黑马    时间: 2015-4-26 23:09
标题: Java中的io流关闭问题---求助大神
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()调用语句呢?????
作者: Ray丶少年    时间: 2015-4-27 11:06
因为你的流已经关闭了,不能再进行后续操作
作者: Ray丶少年    时间: 2015-4-27 11:20
没循环一次你都在关流,这个操作是不行的
作者: 燕赵之风    时间: 2015-4-27 13:04
Ray丶少年 发表于 2015-4-27 11:20
没循环一次你都在关流,这个操作是不行的

飞哥讲的有道理,你只开了一次流,但是你关闭了n多次,有点不合理。水龙头你都关掉了你还一直关它干啥?
作者: silencer    时间: 2015-4-27 13:40
流使用结束后再关闭,在for循环中一直在使用,所以不能关闭
作者: 真正黑马    时间: 2015-4-28 08:56
Ray丶少年 发表于 2015-4-27 11:20
没循环一次你都在关流,这个操作是不行的

明白了,谢谢
作者: 真正黑马    时间: 2015-4-28 08:57
silencer 发表于 2015-4-27 13:40
流使用结束后再关闭,在for循环中一直在使用,所以不能关闭

搞明白了,谢谢
作者: ywen_chan    时间: 2015-4-28 10:22
流资源关闭不应该在循环中
作者: 李海明    时间: 2015-4-28 18:36
又长知识了
作者: qinrh    时间: 2015-4-28 19:10
你太早关闭资源了,还没有用完就给关掉了。。。系统就不能继续用资源了
作者: IDhmpj    时间: 2015-4-28 19:12
水龙头只能被关一次,更何况,你在循环体中关闭流。第一次读取后就被关了,下次循环的时候再读取就会抛出IOException
文档中对于close()的说明:
关闭该流并释放与之关联的所有资源。在关闭该流后,再调用 read()、ready()、mark()、reset() 或 skip() 将抛出 IOException。关闭以前关闭的流无效。
作者: ninjaes    时间: 2015-4-28 19:19
涨知识了,确实你的的流关时机不对




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2