如何在Java中将文件目录结构作为JSON获取?

5

我想要实现的目标非常简单。我想创建一个方法,它接受一个根目录参数作为输入,并返回以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格式,类似于一个数组,数组内嵌套数组的解决方案。这个可行吗?

请问您能否重新格式化您的代码段? - AdamPillingTech
1个回答

3
如果您想创建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 + "]";
}

主要功能:

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

}

要使用JSON,您需要包含jackson-mapper-asl工件。

在将其添加到程序之前,请仔细检查它,因为我没有进行过多的测试,但您可以了解一下。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接