簡體   English   中英

Java遍歷所有目錄並查找文件

[英]Java to traverse all directories and find a file

我必須搜索可以在任何目錄或驅動器中的文件。 它應該與任何操作系統兼容。 當我用google搜索時,大多數代碼都會遍歷特定目錄,而不是整個文件系統。 有什么辦法可以有效地做到這一點? 任何幫助或建議,將不勝感激。

下面的代碼是我從http://www.mkyong.com/java/how-to-traverse-a-directory-structure-in-java/中獲得的 ,但是我們必須傳遞一些目錄作為參數。 有沒有一種方法可以概括所有位置?

public static void main (String args[]) {

    displayIt(new File("C:\\"));
}

public static void displayIt(File node){

    System.out.println(node.getAbsoluteFile());

    if(node.isDirectory()){
        String[] subNote = node.list();
        for(String filename : subNote){
            displayIt(new File(node, filename));
        }
}

Apache Commons-IO是用於此類操作的良好API。 對於Unix系統,您可以僅使用根“ /”,但這不適用於Windows,因此您將需要所有根並對其進行迭代:

File[] roots = File.listRoots();

Collection<File> files = new ArrayList<File>();    

for(File root : roots) {
    files.addAll(FileUtils.listFiles(
      root, 
      new RegexFileFilter(<your regex filter>), 
      DirectoryFileFilter.DIRECTORY
    ));
} 

這種代碼段將列出目錄和子目錄中的所有文件。 您不必將任何文件添加到allFiles中,您可以在此處進行檢查。 由於您尚未提供任何代碼(所以我假設您尚未嘗試任何操作),我將讓您對其進行更新;)

private void addFiles(File file, Collection<File> allFiles) {
    File[] files = file.listFiles();
    if (files != null) {
       for (File f : files) {
           allFiles.add(f);
           addFiles(f, allFiles);
       }
    }
}

如果您想通過遞歸進行操作,以下是DFS的代碼,代碼可能無法正常工作(我從未對其進行過測試),並且未進行優化,但可能會為您提供一些解決問題的方法

File find(String directoryName, String pattern)
{
 File currentDirectory = loadFile(directoryName);

for (String name: currentDirectory .list())
{
File children = loadFile(name)

if (children.isDirectory())
{
 File file = find(name, pattern)
 if (file !=null)
 {
  return file;
 }
}
else
{
 if (match(name,pattern)
  {
   return children;
  }
}
}
return null;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM