多个文件在一次循环中写出到本地,但是输入输出流未关闭导致总有一个文件提示被占用
2018-01-31 21:40
381 查看
多个文件在一次循环中写出到本地,但是输入输出流未关闭导致总有一个文件提示被占用
在没有这两句代码的时候,因为流未被关闭,所以多文件的时候,总有一个文件显示被流占用了
使用完流之后,一定要马上关闭,而不是等finally来关闭,它只是做最后的检查而已.
os.close();
in.close();
在没有这两句代码的时候,因为流未被关闭,所以多文件的时候,总有一个文件显示被流占用了
使用完流之后,一定要马上关闭,而不是等finally来关闭,它只是做最后的检查而已.
os.close();
in.close();
for (int i = 0; i < fileOfBills.size(); i++) { File file = fileList.get(i); sb = new StringBuilder(); sb.append(dirPath + File.separator).append(fileOfBills.get(i).getName() + FileHelper.getSuffixByFileName1(file.getName())); os = new FileOutputStream(new File(sb.toString())); in = new FileInputStream(file); IOUtils.copy(in, os); //os.close(); // in.close(); }
@Override public List<FileOfBill> saveFileOfBillByBill(Bill bill, List<FileOfBillWrap> list) throws Exception { setDestDir(); //文件清单 List<File> fileList = new ArrayList<>(); //订单对应文件表清单 List<FileOfBill> fileOfBills = new ArrayList<>(); //订单对应文件表 FileOfBill fileOfBill; if (list.size() > 0) { //1:存库 for (FileOfBillWrap fileOfBillWrap : list) { fileOfBill = fileOfBillWrap.getFileOfBill(); fileOfBill.setBill(bill); fileOfBill.setCreateTime(new Date()); //添加文件清单 if (null != fileOfBillWrap.getFile()) { File file = fileOfBillWrap.getFile(); //获取文件后缀 fileOfBill.setSuffix(FileHelper.getSuffixByFileName(file.getName())); //获取文件名 String fileName = UUIDUtils.getUUID(); fileOfBill.setName(fileName); fileList.add(fileOfBillWrap.getFile()); } //存库 FileOfBill add = this.add(fileOfBill); fileOfBills.add(add); } } //文件存硬盘 //创建文件存储目录 //文件存储目录 String dirPath = DEST_DIR + File.separator + bill.getBillId(); FileHelper.mkdirs(dirPath); OutputStream os = null; InputStream in = null; StringBuilder sb; /** * 2:存本地硬盘 * 根据数据库已经新增的fileOfBills循环 * 确保数据库操作成功 */ try { for (int i = 0; i < fileOfBills.size(); i++) { File file = fileList.get(i); sb = new StringBuilder(); sb.append(dirPath + File.separator).append(fileOfBills.get(i).getName() + FileHelper.getSuffixByFileName1(file.getName())); os = new FileOutputStream(new File(sb.toString())); in = new FileInputStream(file); IOUtils.copy(in, os); os.close(); in.close(); } } catch (IOException e) { throw e; } finally { if (null != in) { in.close(); } if (null != os) { os.close(); } } //3:上传文件到武仲 for(int i = 0;i < fileOfBills.size(); i++){ upLoadFileRemote(fileOfBills.get(i)); } return fileOfBills; }
相关文章推荐
- vs中,在ASPX文件下面有智能提示,但是为什么新建一个类,却没了智能提示
- Win7运行程序总提示出现一个问题,导致程序停止正常工作。请关闭该程序?原来GreenBrowser下载有问题……
- visio2007或office 2007安装失败提示一个或多个受保护的windows文件导致office 2007安装失败
- 打开资源视图时-提示在另一个编辑器中打开,但是已经关闭所有的打开文件还是这样
- SVN提示update更新成功,但是本地文件却没有更新
- SVN提示update更新成功,但是本地文件却没有更新
- File.Create在用这创建文件后,需要关闭,否则在访问这个文件提示文件被占用了
- 打开资源视图时-提示在另一个编辑器中打开,但是已经关闭所有的打开文件还是这样,是不是要修改哪个文件
- 怎么将一个整个文件一次读到内存,然后循环从内存中读取1024字节,写入新的文件(或socket发送出去)
- 打开资源视图时-提示在另一个编辑器中打开,但是已经关闭所有的打开文件还是这样
- 打开资源视图时-提示在另一个编辑器中打开,但是已经关闭所有的打开文件还是这样
- 关闭文档时总是提示Normal.dot文件被占用《转》
- 提示ORA-03113:通信通道的文件结尾解决导致ORA-01033: ORACLE 正在初始化或关闭(flash_recovery_area空间压力)
- 点击VS2010解决方案中的某个项目的任意一个文件导致VS开发环境关闭
- MyEclipse中,当我们写一个类实现一个接口时,会自动生成重写该接口的方法,但是,方法的参数提示不够好,是什么原因导致的呢?该如何解决呢?
- 多个页面共用一个js文件,但是有些页面没有某个元素,导致报错
- vs中,在ASPX文件下面有智能提示,但是为什么新建一个类,却没了智能提示
- 自己动手实现一个守护进程,当控制台窗口关闭时还可以在后台运行。每隔一秒钟向my.log文件中插入一条记录
- 安卓studio编辑gradle文件非常卡和远程关闭一个现有链接问题解决
- java 循环读取一个指定文件夹下的所有文件