【问题标题】:Recursive stacks not saving changes in hashmap递归堆栈不保存哈希图中的更改
【发布时间】:2015-12-03 23:35:01
【问题描述】:

我的代码如下

public class FileHandler {

public static void main(String... args) {
    File file = new File("C:/Users/TJF22/Desktop/Simple Network 1/alpha 15");
    mapFiles(file);
}

public static HashMap<String,File[]> mapFiles(File directory){
    File[] inputContents = directory.listFiles();
    HashMap<String,File[]> fileMap= new HashMap<String,File[]>();
    for (File content : inputContents){
        if (content.isDirectory()){
            File[] nestedContents = content.listFiles();
            if (areAllFiles(nestedContents)){
                String key = content.getPath();
                fileMap.put(key,nestedContents);
            } else {
                mapFiles(content);
            }
        }
    }
    return fileMap;
}

public static boolean areAllFiles(File[] directory){
    for (File files : directory){
        if (!files.isFile()){
            return false;
        }
    }
    return true;
}

我想要做的是能够递归地遍历给定的输入文件目录以及该输入目录中包含的文件:

-如果文件是一个目录并且所有这些目录内容都是文件,则将目录名作为键关联到其中的文件名(作为值)并存储到fileMap中

-如果文件是一个目录,并且其中包含其他目录,则继续前进,直到找到其中只有文件的目录

-如果文件是文件,则忽略它

但我的问题是,当我返回 fileMap、HashMap 时,我得到一个空的 HashMap,因为由于某种原因,我存储的键值对没有被保存。有什么帮助吗?

【问题讨论】:

    标签: java recursion hashmap iteration file-handling


    【解决方案1】:

    您需要跟踪现有的 HashMap,而不是每次重新调用 mapFiles 时都重新创建映射。

    public static HashMap<String,File[]> mapFiles(File directory){
        HashMap<String,File[]> fileMap = new HashMap<String,File[]>();
        fileMap = mapFiles_Recursive(directory, fileMap);
        return fileMap;
    }
    
    
    private static HashMap<String,File[]> mapFiles_Recursive(File directory, HashMap<String,File[]> fileMap) {
        File[] inputContents = directory.listFiles();
        for (File content : inputContents){
            if (content.isDirectory()){
                File[] nestedContents = content.listFiles();
                if (areAllFiles(nestedContents)){
                    String key = content.getPath();
                    fileMap.put(key,nestedContents);
                } else {
                    mapFiles(content, fileMap);
                }
            }
        }
        return fileMap;
    }
    

    【讨论】:

    • DOH,这是一个愚蠢的错误。非常感谢您的帮助!
    • 如果你喜欢我的回答,记得标记为你选择的答案。为了帮助别人,在网站上。问候 -
    猜你喜欢
    • 2014-03-13
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 2015-01-02
    • 2014-01-02
    • 2015-09-12
    相关资源
    最近更新 更多