【应对服务器端产生临时文件的解决方案】
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基础中流的应用是非常有用的,基础很重要!
一:【删除服务器端临时文件的方法】
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基础中流的应用是非常有用的,基础很重要!
相关文章推荐
- axis2 webservice服务,在服务器端产生大量临时文件问题
- 产生唯一的临时文件mkstemp()
- 多项目上传文件解决方案之:服务器端
- “Word无法创建工作文件,请检查临时环境变量”微软解决方案[转]
- 定时删除服务器产生的临时文件
- 利用POi3.8导出excel产生大量xml临时文件怎么办?
- vs技巧分享:多程序集解决方案里临时文件清除和生成目录里依赖的第3方类库外部文件自动生成
- .net MVC 框架调试过程中,产生大量的临时文件
- BitmapFactory decoding大文件中产生OutOfMemoryError解决方案
- linux 生成的文件或shell后面产生windows无法识别的特殊符号 解决方案
- 关于rar解压文件时产生的临时文件的位置。
- 关于在用struts2上传文件之后,会产生临时文件的问题
- Linux练习(产生临时文件)
- DataSet导出到Excel比较完整的解决方案(二)--服务器端生成文件(downmoon)
- 请问如何让Dundas chart for asp.net控件产生的临时图片文件减少一些?
- make clean 清除产生的临时文件
- 在网页上播放多种后缀的视频文件的临时解决方案
- 预编译加速编译(precompiled_header),指定临时文件生成目录,使项目文件夹更干净(MOC_DIR,RCC_DIR, UI_DIR, OBJECTS_DIR),#pragma execution_character_set("UTF-8")"这个命令是在编译时产生作用的,而不是运行时
- mysql临时文件产生多引起mysql 挂起的问题处理
- Android Studio中R文件丢失可能的产生原因 以及解决方案