2016-07-29 50 views
0

下面的代码给出了以“-path.mp4”结尾的目录中文件的文件路径。但我需要获取不以“ -path.mp4" 。修改filefilter

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; 
+0

1)获取'allFiles' 2)获取所有'* -path.mp4'文件3)从'allFiles'中删除所有'* -path.mp4'文件 –

+0

Tanx,但我需要一个更简单的方法 –

回答

0

您可以轻松编写自己的FileFilter代替试图使WildcardFileFilter做一些这并不意味着做,这是包括匹配通配符(s)表示文件...

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(File dir, String name)也。

+0

Thanx它的工作完美 –