2013-02-03 92 views
41

可能重複:
List all files from a directory recursively with Java列表中的文件夾中的所有文件,並分文件夾

我怎樣才能返回一個文件數組包含的文件夾中的所有文件,並分文件夾我的方法只適用於文件夾,它不包含子文件夾。

public File[] listf(String directoryName) { 

    // .............list file 
    File directory = new File(directoryName); 

    // get all the files from a directory 
    File[] fList = directory.listFiles(); 

    for (File file : fList) { 
     if (file.isFile()) { 
      System.out.println(file.getAbsolutePath()); 
     } else if (file.isDirectory()) { 
      listf(file.getAbsolutePath()); 
     } 
    } 
    System.out.println(fList); 
    return fList; 
}       
+5

您可以使用'FileUtils' – Maroun

+0

刪除塊,檢查它是否是一個子目錄? –

+2

FileUtils.listFiles(dir,new String [] {「。xml」},true)...在apache-commons – user2069723

回答

61

使用你當前的代碼,使這個調整:

public void listf(String directoryName, ArrayList<File> files) { 
    File directory = new File(directoryName); 

    // get all the files from a directory 
    File[] fList = directory.listFiles(); 
    for (File file : fList) { 
     if (file.isFile()) { 
      files.add(file); 
     } else if (file.isDirectory()) { 
      listf(file.getAbsolutePath(), files); 
     } 
    } 
} 
+1

fyi如果你想使用當前文件夾'new File(「。」);' – Csanesz

+5

也許公共無效listf(字符串directoryName,列表文件){更好 –

21

使用來自Apache commons的FileUtils

listFiles 

public static Collection<File> listFiles(File directory, 
             String[] extensions, 
             boolean recursive) 
Finds files within a given directory (and optionally its subdirectories) which match an array of extensions. 
Parameters: 
directory - the directory to search in 
extensions - an array of extensions, ex. {"java","xml"}. If this parameter is null, all files are returned. 
recursive - if true all subdirectories are searched as well 
Returns: 
an collection of java.io.File with the matching files 
15

您可以返回List而不是數組,事情變得簡單多了。

public static List<File> listf(String directoryName) { 
     File directory = new File(directoryName); 

     List<File> resultList = new ArrayList<File>(); 

     // get all the files from a directory 
     File[] fList = directory.listFiles(); 
     resultList.addAll(Arrays.asList(fList)); 
     for (File file : fList) { 
      if (file.isFile()) { 
       System.out.println(file.getAbsolutePath()); 
      } else if (file.isDirectory()) { 
       resultList.addAll(listf(file.getAbsolutePath())); 
      } 
     } 
     //System.out.println(fList); 
     return resultList; 
    } 
+0

但我想合併數組 –

+0

爲什麼?我的意思是:你的問題是什麼,爲什麼你想避免使用爲你合併的列表? –

+0

對不起,我困(睡不着) –

相關問題