多个文件在一次循环中写出到本地,但是输入输出流未关闭导致总有一个文件提示被占用

多个文件在一次循环中写出到本地,但是输入输出流未关闭导致总有一个文件提示被占用
在没有这两句代码的时候,因为流未被关闭,所以多文件的时候,总有一个文件显示被流占用了
使用完流之后,一定要马上关闭,而不是等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 saveFileOfBillByBill(Bill bill, List list) throws Exception {


        setDestDir();
        //文件清单
        List fileList = new ArrayList<>();
        //订单对应文件表清单
        List 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;
    }

你可能感兴趣的:(java基础)