下载文件操作时,临时文件的处理可能是经常会碰到却又很容易忽略的问题,如果不仔细处理,很容易在服务器上遗留一堆的临时文件。
一般我们可能会这样做(在Struts2下的代码,其它环境也类似):
// 下载文件
try {
stream = new FileInputStream(new File(downloadFile));
FileUtil.deleteFile(downloadFile);
} catch (Exception e) {
log.error("系统错误" + e.getMessage());
throw new Exception(e.getMessage());
}
然而,虽然写了 FileUtil.deleteFile(downloadFile);, 这句话却不能起任何作用,因为前面的Stream没有关闭,无法Delete。
为此,增加了一下函数。
public static InputStream getDownloadFile(String realPath, byte[] fileContents) throws Exception {
// 初始化Stream
InputStream stream = null;
// 判断参数
if (realPath == null && fileContents == null) {
throw new Exception("not found stream Contents");
}
// 处理模式判断
if (realPath != null && !"".equals(realPath)) {
// 文件模式
try {
// 读取文件到二进制中
File readFile = new File(realPath);
FileInputStream fis = new FileInputStream(readFile);
// 读取
byte[] buffer = new byte[(int)readFile.length()];
fis.read(buffer);
// 关闭
fis.close();
stream = new ByteArrayInputStream(buffer);
} catch (FileNotFoundException e) {
throw e;
}
} else {
// 字节数组模式
stream = new ByteArrayInputStream(fileContents);
}
return stream;
}
代码也改为:
// 下载文件
try {
stream = FileUtil.getDownloadFile(downloadFile, null);
FileUtil.deleteFile(downloadFile);
} catch (Exception e) {
log.error("系统错误" + e.getMessage());
throw new Exception(e.getMessage());
}
即可正确的删除临时文件。
分享到:
相关推荐
电脑用久了,办公文档、电子书、照片、下载的临时文件等堆满了硬盘,眼看着文件夹越来越庞大,其中的杂乱无章的文件该怎么整理呢?一个一个地移动到规划好的文件夹中?这么多文件,可要整理到什么时候啊?使用Dropit...
使用文件备注功能会在根目录生成一个 8db 文件夹来保存数据不要删除 这个功能看上去简单 但是非常实用 只要使用好此功能 能方便的管理一大堆文件 包括可以注明一些 开发思路 BUG 管理等. //2.62 修复了一堆BUG 增加...
[client] port = 3306 socket=/home/mysql/data/mysql.sock ...# 如果临时文件会变得超过索引,不要使用快速排序索引方法来创建一个索引。注释:这个参数以字节的形式给出 myisam_repair_threads ...
在Win7中,用帐户登录系统后在右下角出现这样一个提示信息:您已使用临时配置文件登录,并且桌面也没了,我不是需要知道解决办法,解决办法网上一搜一大堆,我想知道的是出现此类故障信息的原因是什么,什么情况使得...
看到有些朋友的电脑开机后要好久才能动,一大堆程序自动运行,然后再把它们一一关掉。这样不是很烦吗?这里介绍两种方式禁止不必要的自动运行程序。这样做的好处除了能加快启动速度外,还能提高系统在运行中的稳定性...
硬盘会不够用,第一种情形就是安装了很多的软件,另一种情形就是放了一大堆没用的东西。前者必须要靠 Clean Swap 这样的专业反安装软件来处理;后者呢?放心交给 System Cleaner 吧! System Cleaner 提供了三种...
硬盘会不够用,第一种情形就是安装了很多的软件,另一种情形就是放了一大堆没用的东西。前者必须要靠 Clean Swap 这样的专业反安装软件来处理;后者呢?放心交给 System Cleaner 吧! System Cleaner 98 提供了三种...
2.22 有没有一种自动方法来跟踪联合的哪个域在使用? 枚举 2.23 枚举和一组预处理的#define有什么不同? 2.24 枚举可移植吗? 2.25 有什么显示枚举值符号的容易方法吗? 位域 2.26 一些结构声明中的这些...
2.22 有没有一种自动方法来跟踪联合的哪个域在使用? 30 枚举 31 2.23 枚举和一组预处理的#define有什么不同? 31 2.24 枚举可移植吗? 31 2.25 有什么显示枚举值符号的容易方法吗? 31 位域 31 2.26 ...
MAT 文件库 (MFL) 是一个 Java 库,用于读取和写入与 MATLAB 的 MAT 文件格式兼容的 MAT 文件。 它的总体设计目标是: * 提供符合 MATLAB 语义行为的用户友好 API *支持在堆受限或分配受限的环境中处理大量数据* ...
o 3.16 枚举和一组预处理的 #define 有什么不同? o 3.17 有什么容易的显示枚举值符号的方法? * 4. 表达式 o 4.1 为什么这样的代码: a[i] = i++; 不能工作? o 4.2 使用我的编译器,下面的代码 int i=7; ...
通过微信提供得获取临时素材文件得接口,得到了文件(具体方法网上一搜一大堆,后期我也会将完整得代码放进资源里面),但是这里有一个坑得问题,他的格式为.amr得格式,但是最后的目的是转换为文字,因此这里涉及到...
各大编辑器都有一堆的语法高亮文件,然而却没有TXT文件的“语法高亮”。TXT文件也有语法?呵呵。polaris的自定义语法。这也是polaris找到EmEditor后欣喜若狂的原因之一。 新建一个TXT文件,执行“工具”→“当前...
此时会有100000/5000=20个临时文件(外部排序) 排序后选出每个临时文件的前128条,保存,此时有128 * 20 = 2560 条,此时一定小于1MB,可以全局读入到内存排序,做内部排序 排序(归并排序算法) public void sort...
m3u8 downloader 是一款由 .Net 开发的一个简单易用的 m3u8 下载器,现在很多视频网站的视频都分割成了小片段,其 m3u8 就是来记录这一堆地址的文件,使用本下载器可以快速的下载并合并成一个完整的视频文件。
手上有一堆CAD图纸,临时需要打印,可是没装CAD怎么办,不怕,今天小编就给你分享一款Acme CAD Converter 2014 汉化版。Acme CAD Converter 2014 中文版是专业的CAD图形文件转换和查看软件,支持DWG DXF DWF ( Auto...
2.16 枚举和一组预处理的#define 有什么不同? . . . . . . . . . . . . 10 2.17 有什么容易的显示枚举值符号的方法? . . . . . . . . . . . . . . . 11 3 表达式13 3.1 为什么这样的代码: a[i] = i++; 不能工作? ...
“最具挑战性的事情是你最终要将一大堆功能集中到一个提交里,因为它们都是这个组件的一部分”,他解释说:“我希望有一个更好的方式来分解这些提交,因为很难把所有事情(变更历史)记在脑子里。”如果这个情况你听...