【应对服务器端产生临时文件的解决方案】

本文介绍了两种处理服务器端临时文件的方法:一是通过线程在指定时间后删除临时文件,但存在线程未能删除文件的问题;二是通过servlet在服务器启动时删除特定类型的临时文件。此外,还提供了一种不生成临时文件的方案,即使用内存流直接返回数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【应对服务器端产生临时文件的解决方案】 一:【删除服务器端临时文件的方法】 1:新开一个线程: //生成一个线程,该线程休眠一定时间后(等待客户端下载完毕后)删除临时文件: new Thread(new Runnable() { public void run() { try { System.out.println("--------开始休眠"); Thread.sleep(15000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("--------开始删除文件"); tempFile.delete(); System.out.println("--------删除成功"); } }).start(); 疑点:这个在我机器上这个线程并没有删除服务器端生成的excel临时文件,不知道什么原因。 缺点是假如在删除临时文件的线程还没开始删除文件的时候,服务器突然停止了,那么产生的这个将成为永久的垃圾文件。 2:新建一个servlet,当服务器每次启动的时候,都删除相应的垃圾文件 a:新建一个servlet: package com.oristand.servlets; import java.io.File; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; public class DeleteRubishFile extends HttpServlet { public void destroy() { } public void init() throws ServletException { //新建一个目录,指向${TOMCAT_HOME}/bin目录下 //可见servlet是在${TOMCAT_HOME}/bin目录下执行的 File directory = new File("."); File[] files = directory.listFiles(); for(File f : files){ if(f.getName().endsWith(".xls")){ f.delete(); } } } } b:web.xml里配置: DeleteRubishFile com.oristand.servlets.DeleteRubishFile 2 二:【从代码上实现,让服务器端根本就不产生临时文件】 方法一: byte[] content = workbook.getBytes(); InputStream is = new ByteArrayInputStream(content); return is; 这个方法当浏览器在下载这个excel文件的时候会报错(丢失数据),因为通过查询相关的api文档可以看到workbook.getBytes()返回的只是 excel文件当中的部分内容; 方法二: ByteArrayOutputStream bos = new ByteArrayOutputStream(); try { //先把excel的内容写到一个数组流当中 workbook.write(bos); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //然后再把数组流中的内容写到一个内存的缓冲区 byte[] content = bos.toByteArray(); //再把缓冲区中的内容封装成一个输入流 InputStream is = new ByteArrayInputStream(content); return is; 这个方案是最好的,服务器端就不会产生临时文件,直接从内存将数据返回; 总结:java基础中流的应用是非常有用的,基础很重要!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值