当前位置: 代码迷 >> Web前端 >> 定时剔除临时文件
  详细解决方案

定时剔除临时文件

热度:282   发布时间:2012-06-30 17:20:12.0
定时删除临时文件
public class TimerDeleteFilesTask implements ITask
{
	private List<FileInfo> files;

	public class FileInfo
	{
		private String folderPath;

		private String regexpFileName;

		private boolean isRecursive;


		/**
		 * 删除目录及目录下的文件
		 * 
		 * @param folderPath - 文件路径
		 * @param regexpFileName - 匹配的后缀名称
		 * @param isRecursive - 是否递归删除
		 */
		public FileInfo(String folderPath, String regexpFileName, boolean isRecursive)
		{
			this.folderPath = folderPath;
			this.regexpFileName = regexpFileName;
			this.isRecursive = isRecursive;
		}
	}

	
	/**
	 * 构造方法
	 * 
	 * @throws IOException
	 */
	public TimerDeleteFilesTask() throws IOException
	{
		this.files = new ArrayList<FileInfo>();
		String tempPath = Config.getInstance().getLogDownloadTempPath();
		this.files.add(new FileInfo(tempPath, ".*.xls", true));
	}


	/**
	 * 任务执行之前
	 */
	public boolean beforeExecute()
	{
		return true;
	}


	/**
	 * 执行任务
	 */
	public void execute()
	{
		for ( FileInfo fileInfo : files )
		{
			// 判断是否是递归删除
			if ( fileInfo.isRecursive )
			{
				recureDeleteFile(new File(fileInfo.folderPath), fileInfo.regexpFileName);
			}
			else
			{
				deleteFiles(fileInfo.folderPath, fileInfo.regexpFileName);
			}
		}
	}
	
	
	/**
	 * 任务执行之后
	 */
	public void afterExecute()
	{
	}


	/**
	 * 查找某目录下指定扩展名的文件
	 * 
	 * @param folderPath - 查找的目录路径
	 * @param regexpFileName-匹配文件后缀名的正则
	 */
	private void deleteFiles(String folderPath, final String regexpFileName)
	{
		File[] files = new File(folderPath).listFiles();
		for ( int i = 0; i < files.length; ++i )
		{
			File file = files[i];
			if ( file.isFile() )
			{
				try
				{
					Pattern p = Pattern.compile(regexpFileName);
					Matcher m = p.matcher(regexpFileName);
					if ( m.find() )
					{
						file.delete();
					}
				}
				catch ( Exception e )
				{
					e.printStackTrace();
				}
			}
		}

	}


	/**
	 * 递归删除路径下的指定后缀名的文件及文件夹
	 * 
	 * @param path-文件路径
	 * @param regexpFileName-匹配文件后缀名的正则
	 */
	private void recureDeleteFile(File folder, String regexpFileName)
	{
		File[] files = folder.listFiles();
		if (null == files)
		{
			return;
		}
		for ( File file : files )
		{
			// 判断是文件还是目录,如果是文件直接删除,如果是目录再调用本身方法递归删除
			if ( file.isFile() )
			{
				try
				{
					Pattern p = Pattern.compile(regexpFileName);
					Matcher m = p.matcher(regexpFileName);
					if ( m.find() )
					{
						file.delete();
					}
				}
				catch ( Exception e )
				{
					e.printStackTrace();
				}
			}
			else
			{
				recureDeleteFile(file, regexpFileName);

			}
		}
	}
	@Override
	public Priority getPriority()
	{
		return Priority.LOW;
	}
}