嗨,在我的应用程序中,我要求列出使用java后端和前端angularjs的给定路径的目录结构,所以如果我给出以下json,它将显示文件夹结构前端
Map<String, Object> dirSt = new HashMap<String, Object>();
Map<String, String> folders = new HashMap<String, String>();
File dir = new File(dirPath);
File[] firstLevelFiles = dir.listFiles();
if (firstLevelFiles != null && firstLevelFiles.length > 0) {
for (File aFile : firstLevelFiles) {
/*for (int i = 0; i < level; i++) {
System.out.print("\t");
}*/
System.out.println(level);
dirSt = new HashMap<String, Object>();
if (aFile.isDirectory()) {
folders = new HashMap<String, String>();
System.out.println("[" + aFile.getName() + "]");
folders.put("name",aFile.getName());
dirSt.put("folders",folders);
listDirectory(aFile.getAbsolutePath(), level + 1);
return dirSt;
} else {
dirSt.put("name",aFile.getName());
System.out.println(aFile.getName());
return dirSt;
}
}
}
return dirSt;
所以现在我必须得到像这样的json来自Backend usinng java和spring boot我尝试了不同的方法,但我没有得到解决方案。所以任何人都可以帮助我实现这一点。谢谢
示例代码我试过跟随代码,它只返回第一个文件夹名称
l = {
'1': [1, 2, 3, 4, 5, 6, 8, 9, 10, 11],
'3': [1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
'5': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 21, 17, 18, 19],
'4': [4, 1, 2, 3, 5, 6],
'7': [1, 2, 8, 3, 4, 5, 6, 7]
}
final_val = sorted(l.items(), key=lambda x: max(x[-1]))[-1][0]
print(final_val)
答案 0 :(得分:1)
从您的问题和评论中看起来您只想使用地图和列表并将其转换为JSON。由于您没有提供有关您如何进行实际JSON映射的任何信息,因此我暂时将其保留,并专注于仅创建Java结构。
由于这是你的任务,我不会提供任何可编辑的代码,但会提供一些伪代码,让你知道应该做什么。
首先,让我们看看一些基础知识:
使用该信息,您的递归方法可能如下所示(请记住,这是伪代码,因此我不会查找所有正确的方法名称和参数):
public Map<String, Object> listDirectory( File dir ) {
File[] content = dir.list();
List<File> files = new LinkedList<>();
List<Map<String, Object>> folders = new LinkedList<>();
for( File f : content ) {
if( f.isDirectory() ) {
Map<String, Object> subList = listDirectory( f );
folders.add( subList );
} else {
files.add( f );
}
}
Map<String, Object> result = new HashMap<>();
result.put( "folders", folders );
result.put( "files", files );
return result;
}