我的代码是这样的:
public static void displayDirectoryContents(File dir) {
try {
File[] files = dir.listFiles();
for (File file : files) {
if (file.isDirectory() && !file.getName().endsWith(".svn")) {
System.out.println("directory:" + file.getCanonicalPath());
displayDirectoryContents(file);
} else {
System.out.println("file:" + file.getCanonicalPath());
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
现在,有没有办法将结果集放入散列图?
答案 0 :(得分:0)
你有很多对象的嵌套,所以hashmap可能不是那么好的数据结构。我建议引入自定义POJO和树状结构:
class Node { String canonicalPath; String type; Node parent; List<Node> children = new ArrayList<>(); }
修改了你的代码:
public List<Node> displayDirectoryContents(File dir, Node parent) {
List<Node> result = new ArrayList<Node>();
try {
File[] files = dir.listFiles();
for (File file : files) {
if (file.isDirectory() && !file.getName().endsWith(".svn")) {
Node directory = new Node(file.getCanonicalPath(), "directory", parent);
directory.setChildren(displayDirectoryContents(file, directory);
result.add( directory );
} else {
result.add(new Node(file.getCanonicalPath(), "file", parent);
}
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
类似的东西 - 并且修改而不是你的处理。
或者如果您需要文件列表及其名称:
您可以介绍Map<String, Object>
,而Object
可以为文件夹添加String
(文件)或Map<String, Object>
,并进行递归。
或简单地制作List
个文件,并以递归方式填充它。使用纯文件路径,例如
List<String> displayDirectoryContents(File dir) {
List<String> res = new ArrayList();
File[] files = dir.listFiles();
for (File file : files) {
if (file.isDirectory() && !file.getName().endsWith(".svn")) {
res.add("directory:" + file.getCanonicalPath());
res.addAll(displayDirectoryContents(file));
} else {
res.add("file:" + file.getCanonicalPath());
}
}
return res;
}
并且你可以:
displayDirectoryContents("/dummypath").forEach(System.out.println);
会给你相同的结果。
或字符串字符串
的并发映射 Map<String, String> res = displayDirectoryContents("/dummypath").stream().collect(Collectors.toConcurrentMap(o -> o, o -> o));