2017-12-19 7 views
2

내가 성취하려고하는 것은 매우 간단합니다. 루트 디렉토리 param을 입력으로 받아들이고 파일 폴더 구조를 리턴하는 메소드를 작성하려면 입력 디렉토리 아래에 JSON 데이터가 있어야합니다. 나는 아래 코드에서 시작했다.Java에서 파일 디렉토리 구조를 JSON으로 가져 오는 방법은 무엇입니까?

public class dirscan { 
    public static void main (String args[]) { 
     displayIt(new File("D:\MyDir")); 
    } 

    public static void displayIt(File node) { 
     System.out.println(node.getAbsoluteFile()); 
     if (node.isDirectory()) { 
      String[] subNote = node.list(); 
      for (String filename : subNote) { 
       displayIt(new File(node, filename)); 
      } 
     } 
    } 
} 

디렉토리 및 파일 목록을 인쇄합니다. 나는 배열리스트를 구현하고 아래와 같이 수정했다.

public class DirScan { 
    static List<String> allList = new ArrayList<String>(); 

    public static void main(String args[]) { 
     List<String> mylist = displayIt(new File("D:\Books")); 
     for (String filename : mylist) { 
      System.out.println(filename); 
     } 
    } 

    public static List<String> displayIt(File node) { 
     allList.add(node.getAbsoluteFile().toString()); 
     if (node.isDirectory()) { 
      String[] subNote = node.list(); 
      for (String filename : subNote) { 
       displayIt(new File(node, filename)); 
      } 
     } 
     return allList; 
    } 
} 

도 마찬가지입니다. 내가 달성하려고하는 것은 JSON으로 디렉토리 목록을 반환하는 것입니다. 배열과 같은 것, 배열 솔루션 내부의 배열입니다. 이것이 가능한가?

+0

코드 세그먼트를 다시 포맷 할 수 있습니까? – PillHead

답변

2

당신이 객체와 작업을 더 잘 수있는 JSON을 생성하고 싶은, 그래서 가능한 해결책이 될 수있는 경우 :이 클래스는 파일을 나타내는한다

.

public class CustomFile { 

    private String name; 

    public CustomFile(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    @Override 
    public String toString() { 
     return "CustomFile [name=" + name + "]"; 
    } 

} 

이것은 폴더를 나타내는 클래스입니다.

public class CustomFolder { 

    private String name; 

    List<CustomFile> files; 

    List<CustomFolder> folders; 

    public CustomFolder(String name) { 
     files = new ArrayList<>(); 
     folders = new ArrayList<>(); 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public List<CustomFile> getFiles() { 
     return files; 
    } 

    public void addFile(CustomFile file) { 
     this.files.add(file); 
    } 

    public List<CustomFolder> getFolders() { 
     return folders; 
    } 

    public void addFolder(CustomFolder folder) { 
     this.folders.add(folder); 
    } 

    @Override 
    public String toString() { 
     return "CustomFolder [name=" + name + ", files=" + files + ", folders=" + folders + "]"; 
} 

그리고 주요 기능 : 당신이 jackson-mapper-asl 유물을 포함하는 데 필요한 JSON에 대한

public class Main { 
    static List<String> allList = new ArrayList<String>(); 

    public static void main(String[] args) throws IOException { 
     CustomFolder parentFolder = new CustomFolder("path/to/folder"); 
     CustomFolder mylist = displayIt(parentFolder); 
     ObjectMapper mapper = new ObjectMapper(); 
     System.out.println(mapper.writeValueAsString(mylist)); 
    } 

    public static CustomFolder displayIt(CustomFolder parentFolder) throws IOException { 
     File node = new File(parentFolder.getName()); 
     if (node.isDirectory()) { 
      String[] subNote = node.list(); 
      for (String filename : subNote) { 
       String path = node + "\\" + filename; 
       if (new File(path).isDirectory()) { 
        CustomFolder folder = new CustomFolder(path); 
        parentFolder.addFolder(folder); 
        displayIt(folder); 
       } else { 
        parentFolder.addFile(new CustomFile(path)); 
       } 
      } 
     } 
     return parentFolder; 
    } 

} 

.

프로그램을 추가하기 전에 프로그램을 테스트 해 보았으므로주의 깊게 확인해야합니다.