您的位置:首页 > 编程语言 > Java开发

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

2018-01-31 21:40 381 查看
多个文件在一次循环中写出到本地,但是输入输出流未关闭导致总有一个文件提示被占用

在没有这两句代码的时候,因为流未被关闭,所以多文件的时候,总有一个文件显示被流占用了

使用完流之后,一定要马上关闭,而不是等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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java-io
相关文章推荐