如何获取文件夹的目录结构?

yanzhao77
  • 2
新手上路,请多包涵

使用Java,遍历某磁盘,获得所有文件夹及子文件夹河文件,然后将他以树形图展示
返回一个集合,map或者list都可以

/**
     * 输出给定目录下的文件,包括子目录中的文件
     *
     * @param dirPath 给定的目录
     */
    public Map<String, List<String>> readFiles(String dirPath, Map<String, Map> fileAndDirMap) {
        // 建立当前目录中文件的File对象
        File file = new File(dirPath);
        // 取得代表目录中所有文件的File对象数组
        File[] list = file.listFiles();
        List<String> fileNameList = new ArrayList<>();
        Map<String, List<String>> fileMap = new LinkedHashMap<>();
        fileMap.put(dirPath, fileNameList);
        for (File file1 : list) {
            if (file1.isDirectory()) {
                fileAndDirMap.put(dirPath, fileMap);
                readFiles(file1.getPath(), fileAndDirMap);
            } else {
                fileNameList.add(file1.getName());
            }
        }
        fileAndDirMap.put(dirPath, fileMap);
        // 遍历file数组
        return fileMap;
    }

这是我写的方法,但是返回的子目录与主目录平级
image

回复
阅读 375
4 个回答
✓ 已被采纳
 /**
 * 输出给定目录下的文件,包括子目录中的文件
 *
 * @param dirPath 给定的目录
 */
public Map<String, Map> readFiles(String dirPath , Map<String, Map> fileAndDirMap) {
    // 建立当前目录中文件的File对象
    File curfile = new File(dirPath);
    // 取得代表目录中所有文件的File对象数组
    File[] list = curfile.listFiles();
    if (list != null) {
        for (File file : list) {
            if (file.isDirectory()) {
                Map<String, Map> map = new HashMap<>();
                fileAndDirMap.put(file.getPath(), map);
                readFiles(file.getPath(), map);
            } else {
                fileAndDirMap.put(file.getPath(),null);
            }
        }
    }
    // 遍历file数组
    return fileAndDirMap;
}

你的思路有问题,你的返回值格式只是Map<String,List<String>>,不满足你想要的分层格式,要换成Map存储子目录才可以

作业请自己写

学会把问题 化繁为简,化大为小

  1. 实现一个方法,给定一个目录路径,返回目录下的文件列表
  2. 实现将一个文件列表,进行展示
  3. 如果展开某个子目录,重复 1 和 2

没用过 java,这里提供一个不出所料十行之内可以搞定的简单方法!
这个方法分三步走:

  1. 用你熟悉的包管理器安装 tree。e.g. sudo pacman -S tree
  2. 根据我百度得到的信息,你可以利用 Runtime.getRunTime().exec(...) 执行 tree 命令。(你可能需要把他的输出流处理一下打印到控制台)
  3. 没了。
你知道吗?

宣传栏