public static List<String> getLogFiles(String logLocation, final String pattern) {
File logDirectory = new File(logLocation);
String[] files = new String[]{};
if (logDirectory.isDirectory()) {
files = logDirectory.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.matches(pattern);
}
});
}
return Arrays.asList(files);
}
如果我在上面的代码段中传递了/tmp/logs
和*.log
的正则表达式,我会获取所有日期的所有日志文件,但我希望将结果仅限于今天的日期文件。在获得上面的整个列表后,我可以用Java 7完成这项工作,还是有更好的方法?
我将使用jdk 1.7_71 64位JVM在Unix机器上运行它。
答案 0 :(得分:1)
使用File.lasModified方法比较文件日期修改,请尝试以下代码:
public static List<String> getLogFiles(String logLocation, final String pattern, String date) throws ParseException
{
File logDirectory = new File(logLocation);
String[] files = new String[] {};
SimpleDateFormat f = new SimpleDateFormat("dd-MM-yyyy");
Date d = f.parse(date);
long milliseconds = d.getTime();
if (logDirectory.isDirectory())
{
files = logDirectory.list(new FilenameFilter()
{
@Override
public boolean accept(File dir, String name)
{
return name.matches(pattern) && new File(dir, name).lastModified() > milliseconds;
}
});
}
return Arrays.asList(files);
}
答案 1 :(得分:0)
您可以使用apache commons-io库,它提供预定义的过滤器并支持过滤器链接。
AgeFileFilter ageFilter = new AgeFileFilter(milliseconds, false);
WildcardFileFilter wildcardFilter = new WildcardFileFilter(pattern);
Collection<File> files = FileUtils.listFiles(logDirectory, new AndFileFilter(ageFilter, wildcardFilter), TrueFileFilter.INSTANCE);
请注意,它返回文件对象的集合,而不是字符串数组。