使用线程删除导出临时文件

项目支持大数据量导出excel,我的方案是使用poi生成excle,然后使用struts的下载将其导出,个人感觉这样操作效率是最快的
基本代码:
                this.setDownLoadFilePath(path);
		this.setDownLoadFileName("webOperate.xls");
		return "downLoad";

告诉struts文件所在位置和下载文件的名称,设定return返回类型stream即可以实现下载了,但是现在碰到这样一个问题:生成在服务器上的excel经过一次导出后将没任何用处,而且一个文件都在10M左右,必须把他删除...可想而知 return前是不能做删除的,否则在return以后struts就获取不到文件而输出流了,所以我想到了使用线程来删除,这个是我第一次在实战中用到线程,心里有点激动,所以做个笔记供日后参考;
public class FileDelete implements Runnable {

	//目标文件地址
	private String filePath = "";

	//执行时间
	private Date date;

	//执行后过多少时间删除(单位:分)
	private int flag = 1;

	public FileDelete(String path, Date d) {
		this.filePath = path;
		this.date = d;
	}

	@Override
	public void run() {
		File file = new File(filePath);

		while (true) {
			Date now = new Date();
			if (now.getTime() > (date.getTime() + flag * 60 * 1000)) {
				if (file.exists()) {
					file.delete();
					break;
				}
			}
			
		}
	}

	public String getFilePath() {
		return filePath;
	}

	public void setFilePath(String filePath) {
		this.filePath = filePath;
	}

	public Date getDate() {
		return date;
	}

	public void setDate(Date date) {
		this.date = date;
	}

	public int getFlag() {
		return flag;
	}

	public void setFlag(int flag) {
		this.flag = flag;
	}

}

我的线程类,大致思路就是拿当前事件与执行时间比较,如果执行时间+设定的时间 小于当前时间的时候将文件删除

所以我现在只要这样就搞定了

 this.setDownLoadFilePath(path);
		this.setDownLoadFileName("webOperate.xls");
//开启线程定时删除文件
Date date = new Date();
		FileDelete fileDelete = new FileDelete(filePath,date);
		Thread t = new Thread(fileDelete);
		t.start();
return "downLoad";

你可能感兴趣的:(线程)