`
penua
  • 浏览: 19409 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

下载文件时,你有没有考虑临时文件已经一大堆了?

 
阅读更多

下载文件操作时,临时文件的处理可能是经常会碰到却又很容易忽略的问题,如果不仔细处理,很容易在服务器上遗留一堆的临时文件。

一般我们可能会这样做(在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());
		}

 

 即可正确的删除临时文件。

分享到:
评论
8 楼 zds625 2009-01-21  
在struts2实现上传的时候也会保存文件到临时目录,但是这个目录临时文件不会删除,不知大家是定时做删除处理还是怎样做呢?
7 楼 sdh5724 2009-01-14  
哈, DZ, 连G点。。。。
6 楼 gembler 2009-01-14  
sdh5724出爆击···哈哈
5 楼 sdh5724 2009-01-14  
如果你真想彻底, 就在finnaly里去做。
4 楼 sdh5724 2009-01-14  
如果你真想彻底, 就在finnaly里去做。
3 楼 penua 2009-01-14  
谢谢你们意见.

这确实是很常识性的问题,解决办法也很多, 不过在最近一个项目中,却因为忽略这个问题很久,最终导致临时文件一大堆了, 若没有及时删除, 硬盘随时有可能撑破..

2 楼 myy 2009-01-13  
这种临时文件完全可以集中放在一个固定目录,用后台的定时程序清理,根据具体情况定策略。
1 楼 ariesying 2009-01-12  
资源类的东东用完关闭应该是常识的吧。

相关推荐

    系统临时文件和IE临时文件清除

    系统临时文件和IE临时文件是计算机使用过程中不可避免的产物,它们在日常操作中扮演着重要角色,但也可能随着时间的推移占用大量磁盘空间,甚至成为隐私泄露的风险。因此,定期清理这些临时文件是保持系统运行高效且...

    Mapgis临时备份文件清除

    创建一个记事本文件,输入`del /f /s /q *~*`命令,然后将文件扩展名为.bat,运行这个批处理文件就能一次性删除所有匹配的临时文件。 5. **设置MapGIS自动清理**:为了避免频繁手动清理,可以在MapGIS的配置选项中...

    清除临时文件-自己编辑的

    临时文件的存在在某些情况下是必要的,但在大多数情况下,它们在使用后并没有被及时删除。 清理临时文件的步骤一般包括以下几个方面: 1. **手动清理**:用户可以直接打开系统临时文件夹(如Windows的"C:\Users\...

    清除Visual Stdio 2017工具C#开发的临时文件

    在C#开发过程中,Visual Studio 2017作为一个强大的集成开发环境(IDE),它会生成大量的临时文件来支持项目的构建、调试和其他功能。这些临时文件包括编译后的中间文件、元数据、符号文件(pdb)以及缓存信息。随着...

    系统临时文件清理器

    【系统临时文件清理器】是一款由个人开发者编写的简易应用程序,旨在帮助用户高效地清理计算机中的系统临时文件,以释放磁盘空间并提高系统运行效率。临时文件通常是由操作系统和其他软件在运行过程中产生的,用于...

    自动定期删除文件自动定期删除文件

    这样可以确保不再需要的临时文件、日志文件等不会积累过多,占用宝贵的磁盘空间。 2. **自定义清理目标**:用户可以指定多个文件夹进行清理,如临时文件夹、日志文件夹或任何其他需要定期清理的共享文件夹。这适用...

    快速删除大量文件的工具

    这对于清理临时文件、日志文件或者清理不再需要的大型项目文件非常实用。特别是当文件数量巨大,例如数万甚至数十万个小文件时,这种工具的优势更为明显。 “特别是一堆小文件需要删除时,非常好用”进一步强调了该...

    清除Delphi6/7/2010开发过程临时文件

    本文将深入探讨如何清除Delphi 6、7及2010开发过程中的临时文件,以及介绍一个使用C#语言在Visual Studio 2017环境下编写的工具来自动化这一过程。 Delphi是一款强大的RAD(快速应用开发)工具,主要用于创建...

    VC工程转换+编译临时文件清理工具

    在软件开发过程中,尤其是使用Visual C++(VC)进行编程时,开发者经常会遇到两大问题:一是随着项目的发展,编译过程会产生大量的临时文件,这些文件占据了不少硬盘空间;二是随着VC版本的更新,旧版工程可能需要...

    文件分类神器 DropIt 8.5.1 中文多语免费版.zip

    电脑用久了,办公文档、电子书、照片、下载的临时文件等堆满了硬盘,眼看着文件夹越来越庞大,其中的杂乱无章的文件该怎么整理呢?一个一个地移动到规划好的文件夹中?这么多文件,可要整理到什么时候啊?使用Dropit...

    八年PHP文件管理器 v2.6.2 免费版.rar

    使用文件备注功能会在根目录生成一个 8db 文件夹来保存数据不要删除 这个功能看上去简单 但是非常实用 只要使用好此功能 能方便的管理一大堆文件 包括可以注明一些 开发思路 BUG 管理等. //2.62 修复了一堆BUG 增加...

    电脑硬盘文件夹整理工具、文件清理

    例如,可以优先清理临时文件、系统日志、下载文件夹中的旧文件等。此外,对于大文件,如高清视频或大型游戏,如果不再需要,也可以考虑删除或移动到外部存储设备。 在清理过程中,要特别注意不要误删重要文件。许多...

    jxl写大文件时会出现内存溢出

    当写入大文件时,它一次性将所有数据加载到内存中,然后逐行写入。对于小文件,这种方法是可行的,但对于大文件,特别是包含数千行甚至百万行的数据,内存需求可能会超出JXL库和JVM所能提供的限制。 为了解决这个...

    QQ垃圾文件清除!!!!!!!!

    1. **临时文件**:QQ在运行时为了快速读取数据会创建临时文件,例如图片预览、聊天记录等,这些文件在使用后通常不会自动删除。 2. **缓存文件**:QQ的聊天记录、表情、主题等都会被缓存在本地,以加快加载速度。但...

    处理大XML文件解析采用分段方式

    - 使用`-Djava.io.tmpdir`指定临时目录,将大文件的临时分解部分存储在磁盘上,而不是内存。 - 使用`-XX:+UseConcMarkSweepGC`开启CMS垃圾回收器,它对处理大对象和长时间存活的对象有更好的效果。 - 考虑使用XML...

    win7电脑队列中的windows错误报告文件怎么清除?.docx

    扫描完成后,会显示一个列表,包括临时文件、系统日志、Internet缓存等。滚动列表,找到“系统队列中的Windows错误报告文件”这一项。如果你不确定,可以查看旁边的描述,确认它就是我们要删除的错误报告。 5. 在...

    php的$_FILES的临时储存文件与回收机制实测过程

    然而,在这里遇到了一个问题:在第二轮请求中,临时文件可能已经不存在了。因为默认情况下,PHP会在脚本执行完毕后,自动清理所有上传的临时文件。 为了解决这个问题,开发者可以采取措施,手动移动临时文件到一个...

    java解决大批量数据导出Excel产生内存溢出的方案

    - SXSSF不保存整个工作簿在内存中,而是将数据写入磁盘的临时文件,只有最近使用的行保留在内存中,其余的被持久化到磁盘。 3. **使用XSSF替代HSSF**: - HSSF是处理.xls文件的API,而XSSF用于处理.xlsx文件。...

    struts文件上传大小限制

    确保服务器有足够的堆内存分配,并且可以适当调整`struts.multipart.saveLocation`属性,将上传文件临时存储在硬盘上,而不是内存中。 3. **配置错误** 配置文件中的大小单位错误(如误写成KB而非MB)或配置项拼写...

    mysql数据库my.cnf配置文件

    [client] port = 3306 socket=/home/mysql/data/mysql.sock ...# 如果临时文件会变得超过索引,不要使用快速排序索引方法来创建一个索引。注释:这个参数以字节的形式给出 myisam_repair_threads ...

Global site tag (gtag.js) - Google Analytics