您的位置:首页 > 其它

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

2009-10-31 13:18 232 查看
【应对服务器端产生临时文件的解决方案】

一:【删除服务器端临时文件的方法】
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基础中流的应用是非常有用的,基础很重要!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐