如何在Java中获得JSON格式的文件目录结构?
我想做的事情很简单。我想创建一个方法,该方法接受根目录参数作为输入,并将输入目录下的文件夹结构作为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.
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
工件
在添加到您的程序之前,您应该仔细检查它,因为我没有对它进行太多测试,但您可以感觉到。请重新格式化您的代码段好吗?