为了账号安全,请及时绑定邮箱和手机立即绑定

如何创建从根目录到文件完整路径的映射

如何创建从根目录到文件完整路径的映射

慕仙森 2022-08-17 12:16:52
我正在尝试制作一种方法,该方法可以比较一些根路径和完整路径,并将具有名称和完整路径的所有目录提取到每个目录中FileMap例如,假设我想做一个看起来像这样的东西:MapMap<String, File> mapFile = new HashMap<>;mapFile.put("root", new File("/root"));mapFile.put("dir1", new File("/root/dir1"));mapFile.put("dir2", new File("/root/dir1/dir2"));mapFile.put("dir3", new File("/root/dir1/dir2/dir3"));以下是我到目前为止的解决方案:private Map<String, File> fileMap(String rootPath, File file) {    Map<String, File> fileMap = new HashMap<>();    String path = file.getPath().substring(rootPath.length()).replaceAll("\\\\", "/");// fu windows....    String[] chunks = path.split("/");    String p = rootPath.endsWith("/") ? rootPath.substring(0, rootPath.length() - 1) : rootPath;    for (String chunk : chunks) {        if (chunk.isEmpty()) continue;        p += "/" + chunk;        fileMap.put(chunk, new File(p));    }    return fileMap;}这就是应该如何使用:Map<String, File> fileMap = fileMap("/root", new File("/root/dir1/dir2/dir3"));fileMap.forEach((name, path) -> System.out.println(name + ", " + path));主要问题是我不喜欢它,它看起来只是为了通过测试而制作的......它看起来很糟糕。Java中是否有任何内置的解决方案或功能可以更清楚地说明这一点。编写这样的东西感觉就像我试图找到如何制作沸水。因此,任何帮助将不胜感激。谢谢。
查看完整描述

2 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

使用路径类获取目录名称:


private static Map<String, File> fileMap(String rootPath, File file) {

    Map<String, File> fileMap = new HashMap<>();

    fileMap.put(Paths.get(rootPath).getFileName().toString(), new File(rootPath));  // add root path

    Path path = file.toPath();


    while (!path.equals(Paths.get(rootPath))) {

        fileMap.put(path.getFileName().toString(), new File(path.toUri())); // add current dir

        path = path.getParent(); // go to parent dir

    }

    return fileMap;

}

您甚至可以直接作为参数传递,例如Path


fileMap("/root", new File("/root/dir1/dir2/dir3").toPath());

在这种情况下,您根本不需要该方法File


查看完整回答
反对 回复 2022-08-17
?
茅侃侃

TA贡献1842条经验 获得超21个赞

您可以使用该方法获取文件路径,直到到达根目录:file.getParentFile()


private static Map<String, File> fileMap(String rootPath, File file) {

    if (!file.getAbsolutePath().startsWith(rootPath)) {

        throw new IllegalArgumentException(file.getAbsolutePath() + " is not a child of " + rootPath);

    }

    File root = new File(rootPath);

    Map<String, File> fileMap = new HashMap<>();

    while (!root.equals(file)) {

        fileMap.put(file.getName(), file);

        file = file.getParentFile();

    }

    fileMap.put(root.getName(), root);

    return fileMap;

}


查看完整回答
反对 回复 2022-08-17
  • 2 回答
  • 0 关注
  • 131 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信