2011-06-06 182 views
5

我需要在目錄樹中根據其名稱查找文件。然後顯示該文件的路徑。我發現了這樣的東西,但它按照擴展名進行搜索。任何人都可以幫助我,我該如何重新編寫代碼以滿足我的需求......謝謝java:根據目錄和子目錄中的名稱搜索文件

public class filesFinder { 
public static void main(String[] args) { 
    File root = new File("c:\\test"); 

    try { 
     String[] extensions = {"txt"}; 
     boolean recursive = true; 


     Collection files = FileUtils.listFiles(root, extensions, recursive); 

     for (Iterator iterator = files.iterator(); iterator.hasNext();) { 
      File file = (File) iterator.next(); 
      System.out.println(file.getAbsolutePath()); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
} 
+0

你能提供一個鏈接到您在哪裏找到代碼?我不確定FileUtils是否是Java庫的一部分,它可能是別人的自定義類...沒關係,找到它,http://commons.apache.org/io/apidocs/org/apache/commons/ io/FileUtils.html – 2011-06-06 12:11:47

回答

9
public class Test { 
    public static void main(String[] args) { 
     File root = new File("c:\\test"); 
     String fileName = "a.txt"; 
     try { 
      boolean recursive = true; 

      Collection files = FileUtils.listFiles(root, null, recursive); 

      for (Iterator iterator = files.iterator(); iterator.hasNext();) { 
       File file = (File) iterator.next(); 
       if (file.getName().equals(fileName)) 
        System.out.println(file.getAbsolutePath()); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

String fileName =「a.txt」;不錯,但不起作用 – skaryu 2011-06-06 12:30:44

+0

@skaryu - 適用於我...你是否添加了包含條件的整個塊? – Udi 2011-06-06 12:32:49

+0

oooo ...它的工作原理...非常感謝你 – skaryu 2011-06-06 12:40:24

2

Java中的遞歸目錄搜索相當簡單。 java.io.File類有一個listFiles()方法,該方法給出目錄中的所有File子級;還有一個isDirectory()方法,您在File上調用以確定是否應遞歸搜索特定的孩子。

+0

有關java.io.file的文檔可以在http://download.oracle.com/javase/6/docs/api/java/io/File.html找到 – 2011-06-06 12:17:31

0

我真的不知道FileUtils是做什麼的,但如何將擴展中的「txt」更改爲「yourfile.whatever」?

+0

FileUtils來自apache java庫,顯然,http://commons.apache.org/io/apidocs/org/apache/commons/io/FileUtils.html – 2011-06-06 12:16:56

+0

是的..更改擴展名不會工作.. – Udi 2011-06-06 12:21:23

+0

是的...它不起作用 – skaryu 2011-06-06 12:24:31

1

您可以使用FileFilter像這樣。

public class MyFileNameFilter implements FilenameFilter { 

@Override 
public boolean accept(File arg0, String arg1) { 
    // TODO Auto-generated method stub 
    boolean result =false; 
    if(arg1.startsWith("KB24")) 
     result = true; 
    return result; 
} 

}

,並調用它像這樣

File f = new File("C:\\WINDOWS"); 
    String [] files = null; 
    if(f.isDirectory()) { 

     files = f.list(new MyFileNameFilter()); 
    } 

    for(String s: files) { 

     System.out.print(s); 
     System.out.print("\t"); 
    } 
+0

這有一個問題:files = f.list(new MyFileNameFilter()); – skaryu 2011-06-06 12:28:56

+0

這是什麼問題?我只是試了一下,它爲我工作。 – sudmong 2011-06-06 12:30:30

+0

不能使用recursiveSearch類型的封閉實例。必須使用可在其頂部實現的recursiveSearch – skaryu 2011-06-06 12:35:45

0
public static File find(String path, String fName) { 
    File f = new File(path); 
    if (fName.equalsIgnoreCase(f.getName())) return f; 
    if (f.isDirectory()) { 
     for (String aChild : f.list()) { 
      File ff = find(path + File.separator + aChild, fName); 
      if (ff != null) return ff; 
     } 
    } 
    return null; 
} 
相關問題