嗨,在我的应用程序中,我需要使用java后端和前端angularjs列出给定路径的目录结构,因此从前端开始,如果我给出以下json,它将显示文件夹结构的前端
{ folders: [
{ name: 'Folder 1', files: [{ name: 'File 1.jpg' }, { name: 'File 2.png' }], folders: [
{ name: 'Subfolder 1', files: [{ name: 'Subfile 1.txt' }] },
{ name: 'Subfolder 2' },
{ name: 'Subfolder 3' }
]},
{ name: 'Folder 2' }
], files: [{ name: 'File 1.gif' }, { name: 'File 2.gif' }]}
所以现在我必须从Backend usinng java和spring boot那里得到像这个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。由于您没有提供有关如何进行实际JSON映射的任何信息,因此我暂时将其保留,仅专注于Java结构的创建。
由于这是您的任务,因此我不会提供任何可编译的代码,但会提供一些伪代码来使您了解应该怎么做。
首先,让我们看一些基本知识:
JSON映射器通常会将Java映射映射到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;
}