首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在递归Java之后将文件添加到列表

无法在递归Java之后将文件添加到列表
EN

Stack Overflow用户
提问于 2016-06-04 08:29:53
回答 2查看 42关注 0票数 0

我不太清楚如何命名这个问题,但我有一些错误,我并不真正理解。

我有一个方法,它递归地搜索标有根目录的“计算”的子目录,以查找它的文件内容。当我打印到控制台时,它似乎很有效。但是,当我试图将这些文件添加到文件列表中时,它似乎无法工作,大小为0.

如何将这些文件添加到列表或File[]或任何类型的数据结构中,以便进行处理?

这是我的代码:

代码语言:javascript
复制
public static List<File> walkDirectory(String path) {

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

    File root = new File(path);
    File[] list = root.listFiles();

    if (list == null) return null;

    for (File f : list) {

        if (f.isDirectory()) {
            walkDirectory(f.getAbsolutePath());
        } 

        else if (f.getParentFile().getName().contains("calculation")) {
            fileList.add( f ); // does not work...
            System.out.println("File: " + f.getAbsoluteFile());

        }
    }

    return fileList;
}

public static void main(String[] args) {
    System.out.println(FileWalker.walkDirectory("/path/to/root/directory").size()); // size is 0
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-04 08:40:09

将这一行List<File> fileList = new ArrayList<File>();移到walkDirectory函数的外部。这里发生的情况是,每次调用函数时都要创建一个新的fileList变量。

要么使类的fileList私有静态变量,要么在函数本身中传递List参数。

票数 2
EN

Stack Overflow用户

发布于 2016-06-04 08:39:21

代码语言:javascript
复制
   if (f.isDirectory()) {
        walkDirectory(f.getAbsolutePath());
    } 

您不会返回或做任何与walkDirectory()结果有关的事情。您可能希望将结果累加到一个列表中,并在循环完成后返回它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37628121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档