Я пытаюсь создать метод, который сравнивает некоторый корневой путь и полный путь File
и извлекает все каталоги с именами и полными путями к каждому каталогу в Map
Например, допустим, яхочу сделать Map
, который будет выглядеть примерно так:
Map<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, которые могут сделать это более понятным.При кодировании чего-то подобного я чувствую, что пытаюсь найти способ кипятить воду.Так что любая помощь будет оценена.Спасибо.