首页 > 解决方案 > 如何在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"]
        }
    }

}

标签: javafilerecursionlinked-listhashmap

解决方案


推荐阅读