目录结构结果为后端的json

时间:2017-09-28 13:41:26

标签: java spring-boot directory

嗨,在我的应用程序中,我要求列出使用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)

1 个答案:

答案 0 :(得分:1)

从您的问题和评论中看起来您只想使用地图和列表并将其转换为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;
}