【问题标题】:list all files in the folder and also sub folders [duplicate]列出文件夹中的所有文件以及子文件夹[重复]
【发布时间】:2013-02-03 19:34:42
【问题描述】:

可能重复:
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;
}                        

【问题讨论】:

  • 你可以使用FileUtils
  • 去掉检查是否是子目录的块?
  • FileUtils.listFiles(dir, new String[]{".xml"}, true)... in apache-commons

标签: java


【解决方案1】:

使用您当前的代码,进行此调整:

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

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

【讨论】:

  • 仅供参考,如果你想要当前文件夹,你可以使用`new File(".");'
  • 也许 public void listf(String directoryName, List files) { 更好
  • 在迭代之前应该对fList数组进行空检查。
  • if(fList != null{ 缺少),只需修复为if(fList != null) {
【解决方案2】:

使用来自 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

【讨论】:

    【解决方案3】:

    你可以返回一个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;
        } 
    

    【讨论】:

    • 但我想合并数组
    • 为什么?我的意思是:您的问题是什么?为什么要避免使用为您完成所有合并的列表?
    • 是的,对不起,我现在困了(失眠)
    • 这个工作,我在我的应用程序中使用过它
    • 可以递归地返回指定目录中的文件和目录。由于问题(即使它是重复的)是询问如何从提供的目录和所有子目录中的文件返回(仅)文件,您可能需要稍微更改代码://resultList.addAll(Arrays. asList(fList)); for (文件文件: fList) { if (file.isFile()) { resultList.add(file); } else if (file.isDirectory()) { resultList.addAll(listf(file.getAbsolutePath())); } }
    猜你喜欢
    • 2012-04-01
    • 2013-12-11
    • 2013-02-19
    • 1970-01-01
    • 2013-06-06
    • 2019-06-19
    • 2012-07-21
    • 2020-07-02
    • 2010-11-07
    相关资源
    最近更新 更多