MultipartFile 如何释放正在打开的文件

英超冠军利物浦 2014-08-04 06:12:36
/**
* 解压解析ZIP文件生成行程信息
*
* @param file
* @throws IOException
* @throws IllegalStateException
*/
@Transactional
@SuppressWarnings("rawtypes")
public void doUploadVisitReportZip(MultipartFile file) throws IllegalStateException, IOException {
FileOutputStream outStream = null;
InputStream inputStream = null;
try {
// 创建新行程
VisitReport visitReport = new VisitReport();

// 上传的ZIP文件目录
String zipCalculateRealPath = uploadFileService.zipCalculateRealPath() + File.separator;
File saveFile = new File(zipCalculateRealPath + file.getOriginalFilename());
// 保存ZIP文件到磁盘
if (saveFile.exists()) {
saveFile.delete();
}
if (!saveFile.exists()) {
file.transferTo(saveFile);
}
// 读取ZIP文件
ZipFile zipFile = new ZipFile(saveFile);
// 遍历ZIP文件
for (Enumeration entities = zipFile.getEntries(); entities.hasMoreElements();) {
ZipEntry zipEntry = (ZipEntry) entities.nextElement();
String unZipPath = ZipUtil.getUnZipPath(zipEntry.getName(), zipCalculateRealPath);
File unZipFile = new File(unZipPath);
ZipUtil.mkdirs(zipEntry, unZipFile);
// 从ZIP条目获得输入流
inputStream = zipFile.getInputStream(zipEntry);
// 如果不是目录
if (!zipEntry.isDirectory()) {
outStream = new FileOutputStream(unZipFile);
// 获得写入磁盘的输出流
ZipUtil.write2Disk(outStream, inputStream);
}
}

// 读取Excel生成行程Visit Report
String excelFilePath = zipCalculateRealPath + uploadFileService.breakSuffix(file.getOriginalFilename())[0] + File.separator + "visit-info.xls";
InputStream is = new FileInputStream(excelFilePath);
// 读取excel属性赋值
visitReport = readExcelContent(visitReport, is);

dao.saveOrUpdate(visitReport);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (outStream != null) {
outStream.close();
}
if (inputStream != null) {
inputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}


如题,功能是上传一个zip到服务器,然后保存解压,解析里面的内容
File saveFile = new File(zipCalculateRealPath + file.getOriginalFilename());
// 保存ZIP文件到磁盘
if (saveFile.exists()) {
saveFile.delete();
}
if (!saveFile.exists()) {
file.transferTo(saveFile);
}
saveFile这个文件写入后,不能删除,导致上传重复名字的文件会有问题。
transferTo写入文件,如何释放,
...全文
791 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
结贴,每个上传文件加时间戳,定时清理文件就行了
lsongiu86 2014-08-05
  • 打赏
  • 举报
回复
俺一般是用file.getFileItem().getInputStream() 文件流读取的,这个可以关闭
  • 打赏
  • 举报
回复
顶上去
空无c 2014-08-04
  • 打赏
  • 举报
回复
同求,也遇到了,上传文件,文件名重复,然后文件被占用的问题,没解决, 加了个System.gc() 貌似没什么效果,图个心里安慰

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧