Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中获得JSON格式的文件目录结构?_Java_Arrays_Json_Data Structures_Directory - Fatal编程技术网

如何在Java中获得JSON格式的文件目录结构?

如何在Java中获得JSON格式的文件目录结构?,java,arrays,json,data-structures,directory,Java,Arrays,Json,Data Structures,Directory,我想做的事情很简单。我想创建一个方法,该方法接受根目录参数作为输入,并将输入目录下的文件夹结构作为JSON数据返回。我从下面的代码开始 public class dirscan { public static void main (String args[]) { displayIt(new File("D:\MyDir")); } public static void displayIt(File node) { System.out.

我想做的事情很简单。我想创建一个方法,该方法接受根目录参数作为输入,并将输入目录下的文件夹结构作为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;
    }
}
公共类DirScan{
静态列表allList=newarraylist();
公共静态void main(字符串参数[]){
List mylist=displayIt(新文件(“D:\Books”);
用于(字符串文件名:mylist){
System.out.println(文件名);
}
}
公共静态列表displayIt(文件节点){
添加(node.getAbsoluteFile().toString());
if(node.isDirectory()){
String[]subNote=node.list();
用于(字符串文件名:子注释){
显示它(新文件(节点、文件名));
}
}
返回所有列表;
}
}

它也有同样的作用。我试图完成的是,以JSON形式返回目录列表,类似于数组,数组内的数组解决方案。这可能吗

如果要创建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 + "]";
}
公共类自定义文件夹{
私有字符串名称;
列出文件;
列出文件夹;
公用自定义文件夹(字符串名称){
files=newarraylist();
folders=newarraylist();
this.name=名称;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共列表getFiles(){
归还文件;
}
公共无效添加文件(自定义文件){
this.files.add(文件);
}
公共列表getFolders(){
返回文件夹;
}
公用void addFolder(自定义文件夹){
此.folders.add(文件夹);
}
@凌驾
公共字符串toString(){
返回“CustomFolder[name=“+name+”,files=“+files+”,folders=“+folders+””;
}
以及主要功能:

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;
    }

}
公共类主{
静态列表allList=newarraylist();
公共静态void main(字符串[]args)引发IOException{
CustomFolder parentFolder=新建CustomFolder(“路径/到/文件夹”);
CustomFolder mylist=displayIt(parentFolder);
ObjectMapper mapper=新的ObjectMapper();
System.out.println(mapper.writeValueAsString(mylist));
}
公共静态CustomFolder displayIt(CustomFolder parentFolder)引发IOException{
文件节点=新文件(parentFolder.getName());
if(node.isDirectory()){
String[]subNote=node.list();
用于(字符串文件名:子注释){
字符串路径=节点+“\\”+文件名;
if(新文件(路径).isDirectory()){
CustomFolder folder=新的CustomFolder(路径);
parentFolder.addFolder(文件夹);
显示它(文件夹);
}否则{
parentFolder.addFile(新自定义文件(路径));
}
}
}
返回父文件夹;
}
}
对于JSON,您需要包含
jackson映射器asl
工件


在添加到您的程序之前,您应该仔细检查它,因为我没有对它进行太多测试,但您可以感觉到。

请重新格式化您的代码段好吗?