2017-12-19 8 views
2

私が達成しようとしているのはかなり簡単です。私は入力としてルートディレクトリのパラメータを受け入れ、ファイルのフォルダ構造を返すメソッドを作成するには、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; 
    } 

} 

私はそれほど多くのテストをしなかったので、プログラムに追加する前に注意深くチェックする必要がありますが、あなたはその感触を得ることができます。

関連する問題