前段时间,应项目中需要,弄了一个关于删除某个时间段的临时文件、日志文件的页面。其中简单的运用了正则表达式。不过,本小例对于一些需要删除特定文件夹下或者某个目录的文件提供一些参考,也仅仅是我的做法,其实还有别的方式,也可以改进。例如找到某个目录下的HTML、HTM文件,文件名不包含see和preview;例如找到某个目录下的文件名是由13位数字构成的xls、xlsx文件等等。下面的代码仅供参考:
package com.jushi.test;
import java.io.File;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import junit.framework.TestCase;
public class FilePatternTest extends TestCase{
/**
* 查找指定时间范围内文件
* @param endDate 截止日期
*/
public static boolean filesFinder(String strBeginDate, String strEndDate){
try{
ClassLoader cl = FilePatternTest.class.getClassLoader();
InputStream is = cl.getResourceAsStream("com/jushi/test/path.properties");
Properties props = new Properties();
props.load(is);
String htmlDir = props.getProperty("html.path");
String xlsDir = props.getProperty("xls.path");
String[] fileDir = new String[]{htmlDir, xlsDir};//此处可以设置多个特指路径
String[] filePatterns = new String[]{"[^PREVIEW,SEE].*.HTML?$", "[0-9]{13}.XLSX?$"};
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date endDate = sdf.parse(strEndDate);
Date beginDate = sdf.parse(strBeginDate);
int counter = 0;
for(int i=0; i<fileDir.length; i++){
File dir = new File(fileDir[i]);
if(dir.isDirectory()){
File[] files = dir.listFiles();
for(int j=0; j<files.length; j++){
File findFile = files[j];
String findName = findFile.getName();
Date findFileDate = new Date(findFile.lastModified());
for(int k=0; k<filePatterns.length; k++){
String keyFileName = filePatterns[k];
Pattern p = Pattern.compile(keyFileName);
if(findFile.isFile()){
Matcher matcher = p.matcher(findName.toUpperCase());
if(matcher.matches()){
if(findFileDate.before(endDate) && findFileDate.after(beginDate)){ //开始搜寻时间范围内的日志文件
//findFile.delete();//找到文件后删除
counter ++ ;
System.out.println(">>文件名称:" + findFile.getPath());
}
}
}
}
}
}
}
System.out.println("共找到:" + counter + " 个文件!");
return (counter >0);
}catch(Exception e){
e.printStackTrace();
return false;
}
}
public void test(){
assertEquals(true, filesFinder("2011-01-01 00:00:00", "2011-04-07 23:59:59"));
}
public static void main(String as[]){
junit.textui.TestRunner.run(FilePatternTest.class);
}
}
测试结果可以查看控制台输出信息。以上的方法仅供参考,大体思路就是通过正则查找文件,其实也没什么技术含量。大家如果有什么更好的方法可以贴出来,欢迎各位拍砖。