嗨,在我的应用程序中,我需要使用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;
}

09-10 10:16
查看更多