2016-07-29 63 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它的工作完美 –