2011-05-05 139 views
0

enter code here我編寫了下面的代碼,它以遞歸方式搜索文件夾目錄以查找特定的文件夾。 該程序應該檢查文件夾名稱,如果文件夾名稱是「src」,則應該進入該文件夾以獲取所有文件。目前該程序正在獲取所有目錄中的所有文件。遍歷特定文件夾的目錄

public class Main { 

public static void main(String[] args) { 
    File fileObject = new File("C:\\Users\\lizzie\\Documents\\"); 
    recursiveTraversal(fileObject); 
} 

public static void recursiveTraversal(File fileObject) 
{ 
    if (fileObject.isDirectory()) 
    { 
     File allFiles[] = fileObject.listFiles(); 
     for(File aFile : allFiles){ 
      recursiveTraversal(aFile); 
     } 
    } 
    else if (fileObject.isFile()) 
    { 
     System.out.println(fileObject.getAbsolutePath()); 
    } 
} 

}

當我檢查,如果某個文件夾是一個目錄

,我增加了以下約束,但沒有幫助。

if (fileObject.isDirectory() && fileObject.getName().equals("src"))` 

請讓我知道我能做些什麼來改善我的代碼。任何東西將不勝感激。 謝謝

+0

「get」是否指「打印名稱」? – Jeremy 2011-05-05 01:35:34

+0

是的我的意思是它會打印文件名。 – sap 2011-05-05 01:40:47

回答

0

不是檢查名稱上的.equals(),而是使用fileObject.getName()。contains(StringBuffer)或fileObject.getName()。indexOf(「src」)檢查名稱是否包含「src」 )!= -1

+0

試過,但沒有發生。我應該在檢查某個文件是否是目錄時檢查目錄名稱? – sap 2011-05-05 01:40:58

1

你需要做的是對正在打印的東西加上限制,而不是正在穿過的東西。正如你所看到的,遍歷工作正常,因爲它獲取所有子文件夾中的所有文件。

如果您想要打印的「src」目錄(不是子目錄),那麼你可以做的只有裏面的文件名...

... 
else if (fileObject.isFile() && fileObject.getParent().getName().equals("src") 
{ 
    System.out.println(fileObject.getAbsolutePath()); 
} 
... 

如果你想打印什麼在「源」目錄和所有子目錄,那麼你就需要打破你的算法分爲兩個部分

  1. 找到「SRC」文件夾,然後
  2. 使用當前的算法中的所有目錄打印一切從那裏下
2

如果你看看你的if-else內部recursiveTraversal,你會看到你打印的不是目錄,不管它在哪裏。這裏有一個修復:

public class Main { 

    public static void main(String[] args) { 
     File fileObject = new File("C:\\Users\\lizzie\\Documents\\"); 
     recursiveSearch(fileObject); 
    } 

    public static void recursiveSearch(File fileObject) { 
     if (fileObject.isDirectory()) { 
      if (fileObject.getName().equals("src")) { 
       recursivePrint(fileObject); 
      } else { 
       File allFiles[] = fileObject.listFiles(); 
       for(File aFile : allFiles){ 
        recursiveSearch(aFile); 
       } 
      } 
     } 
     // ignore non-directory objects during search 
    } 

    public static void recursivePrint(File fileObject) 
    { 
     if (fileObject.isDirectory()) 
     { 
      File allFiles[] = fileObject.listFiles(); 
      for(File aFile : allFiles){ 
       recursivePrint(aFile); 
      } 
     } 
     else if (fileObject.isFile()) 
     { 
      System.out.println(fileObject.getAbsolutePath()); 
     } 
    } 
} 

這將打印任何目錄src遞歸的所有文件。

+0

謝謝,但沒有奏效。你的代碼進入了一個無限循環。 :( – sap 2011-05-05 01:45:29

+0

糟糕。固定(我認爲)。 – 2011-05-05 01:50:17

+0

+1爲完整解決方案(搜索+打印) – jefflunt 2011-05-05 12:50:58