2013-08-22 70 views
0

我有很多url文件需要通過文件名進行過濾。我有一個應用程序需要在這些文件名稱中查找的單詞列表。我曾嘗試使用contains()函數,但它一直要求CharSequence。我曾嘗試將數組列表轉換爲CharSequence列表,但仍然無效。JAVA過濾目錄中的文件

下面是代碼:

import java.io.File; 
import java.util.ArrayList; 
import java.util.Arrays; 


public class Filter { 
    public static File folder = new File("C:/Users/blah/blah); 
    static String temp = ""; 


    public static void main(String[] args) { 
     // TODO code application logic here 
     System.out.println("Reading files under the folder "+ folder.getAbsolutePath()); 
     listFilesForFolder(folder); 
    } 

    public static void listFilesForFolder(final File folder){ 

     ArrayList<String> aa = new ArrayList<String> 
     (Arrays.asList("one","two","three","four","five","six","seven")); 

     CharSequence[] cs = aa.toArray(new CharSequence[aa.size()]); 


     for(final File fileEntry : folder.listFiles()){ 
     if(fileEntry.isDirectory()){ 
      listFilesForFolder(fileEntry); 

     } else { 
      if (fileEntry.isFile()){ 
       temp = fileEntry.getName(); 
       if((temp.substring(temp.lastIndexOf('.') + 1, 
        temp.length()).toLowerCase()).equals("url")) 
       System.out.println("File = " + folder.getAbsolutePath()+ "\\" + fileEntry.getName()); 

      } 
      } 
      } 
     } 

     } 
+0

將'folder.listFiles()'存儲在一個變量中並迭代它,否則會爲每個循環創建一個新的文件列表,這會減慢您的應用程序。 – BackSlash

+0

你的數組怎麼可以charsequance?你寧願不將數組內部的內容轉換爲charsequence? – Zavior

回答

2

更喜歡使用FileFilter

FileFilter urlFilter = new FileFilter() { 

    @Override 
    public boolean accept(File file) { 
     if (file.isDirectory()) { 
      return true; // return directories for recursion 
     } 
     return file.getName().endsWith(".url"); // return .url files 
    } 
}; 

使用Set用於存儲文件的名稱,而不是一個List的。 Set會給你更好的查詢性能。

Set<String> urlNames = new HashSet<String>(
         Arrays.asList("one","two","three","four","five","six","seven")); 

for (final File fileEntry : folder.listFiles(urlFilter)) { // listFiles using filter 
    if (fileEntry.isDirectory()) { 
     listFilesForFolder(fileEntry); // recurse if directory 
    } else { 
     String fileName = fileEntry.getName(); 
     // match file names w/o extension 
     if (urlNames.contains(fileName.substring(0, fileName.length() - 4))) { 
      System.out.println("File = " + fileEntry.getAbsolutePath()); 
     } 
    } 
}