2013-02-03 12 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

おそらくpublic void listf(String directoryName、List ファイル){ –

21

Apacheコモンズの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

はい私は眠い(不眠症)現時点では –

関連する問題