java - 如何在java中以分层格式获取目录和子目录列表
问题描述
我已使用以下代码创建结构化输出,但无法按照我的预期使用 Map 和 List 以正确的分层方式获得。
public static void main(String[] args) {
InvokeSpringSample a=new InvokeSpringSample();
Map<String, Object> output=a.methodA("/dir");
JSONObject json = new JSONObject(output);
System.out.println("Output : "+json.toString());
}
public Map<String, Object> methodA(String path) {
String maindirpath = path;
Map<String, Object> arr = new HashMap();
// File object
File maindir = new File(maindirpath);
arr.put(maindir.getName(), listDirectory( maindir ));
return arr;
}
public Map<String, Object> listDirectory( File dir ) {
Map<String, Object> result = new HashMap();
String folder = dir.getName();
File[] content = dir.listFiles();
List<String> files = new LinkedList();
Map<String, Object> folders = new HashMap();
for( File f : content ) {
if( f.isDirectory() ) {
Map<String, Object> subList = listDirectory( f );
folders.put( f.getName(),subList );
} else {
files.add( f.getName() );
folders.put(folder,files);
}
}
result.putAll(folders);
System.out.println("2"+result);
return result;
}
我有以下文件结构,我必须将其转换为 JSON 格式
.
├── Folder1
│ ├── Folder2
│ │ ├── file1
│ │ └── file2
│ ├── Folder3
│ │ ├── file3
│ │ └── file4
├── Folder4
│ └── file5
├── Folder5
│ ├── Folder6
│ │ ├── file6
│ │ └── file7
│ └── Folder7
│ └── file8
通过使用上面的代码,我得到了 JSON,但不是预期的,我得到了以下输出
{
"CurrentDir": {
"Folder1": {
"Folder2": {
"Folder2": ["file1", "file2"]
},
"Folder3": {
"Folder3": ["file3", "file4"]
}
},
"Folder4": {
"Folder4": ["file5"]
},
"Folder5": {
"Folder6": {
"Folder6": ["file6", "file7"]
},
"Folder7": {
"Folder7": ["file8"]
}
}
}
}
我想要的预期输出是相似的,但没有额外的文件夹映射:
{
"CurrentDir": {
"Folder1": {
"Folder2": ["file1","file2"],
"Folder3": ["file3","file4"]
},
"Folder4": ["file5"],
"Folder5": {
"Folder6": ["file6","file7"],
"Folder7": ["file8"]
}
}
}
解决方案
推荐阅读
- css - 当我需要不同的宽度时,如何处理 CSS 网格中的动态列数?
- sql - 为什么 SQL Server 死锁牺牲品错误 (1205) 会结束其所有事务?
- silverstripe - silverstripe 4 可翻译模块
- python - objectpath json查询以在python中获取数组值
- javascript - 添加 if 语句后,我的“提示”不会加载到网页上
- svg - 与 SVG 元素的样式和鼠标交互
- c++ - 如何使 Git 提交哈希在 C++ 代码中可用而无需重新编译?
- c# - 返回视图(“NameOfTheView”)不起作用
- c++ - copy_if 与保存序列并使用复制
- c# - DataAdapter.Fill() 在加载大十进制值时抛出溢出异常