修改文件过滤器

Modify filefilter

下面的代码为我提供了以“-path.mp4”结尾的目录中文件的文件路径。但我需要获取不以“-path.mp4”结尾的目录中文件的文件路径-path.mp4".

List<String> results = new ArrayList<String>();

File directory = new File(path);
FileFilter fileFilter = new WildcardFileFilter("*-path.mp4");

File[] files = directory.listFiles(fileFilter);

Arrays.sort(files, new Comparator<File>() {
        public int compare(File f1, File f2) {
            return Long.compare(f2.lastModified(), f1.lastModified());
        }
    });

for (File file : files) {
    if (file.isFile()) {
        results.add(file.getName());
    }
}

return results;

您可以轻松地编写自己的 FileFilter,而不是试图让 WildcardFileFilter 做一些它不应该做的事情,即 include 与通配符匹配的文件 ...

FileFilter fileFilter = new FileFilter() {
    @Override
    public boolean accept(File pathname)
    {
        return ! pathname.getPath().endsWith("-path.mp4");
    }
};

这对您的问题非常具体,但您可以看到它可以通过在 File 匹配正则表达式时返回 true 来概括。


事实上,您可以扩展并覆盖 Apache 的 WildcardFileFilter — 基本思想是:

public class WildcardExclusionFilter extends WildcardFileFilter implements FileFilter
{
    public WildcardExclusionFilter(String glob)
    {
        super(glob);
    }

    @Override
    public boolean accept(File file)
    {
        // Return the Opposite of what the wildcard file filter returns,
        // to *exclude* matching files and *include* anything else.
        return ! super.accept(file);
    }
}

您可能希望包含更多可能的 WildcardFileFilter 构造函数,并重写其 accept 方法的其他形式,accept(File dir, String name)