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

【应对服务器端产生临时文件的解决方案】 一:【删除服务器端临时文件的方法】 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基础中流的应用是非常有用的,基础很重要!

你可能感兴趣的:(【应对服务器端产生临时文件的解决方案】)