在Android中将存储结构映射到JSON格式

时间:2015-04-07 07:29:04

标签: android json file filesystems

我正在做一个项目,用户可以通过互联网向第三方授予文件系统访问权限,我编写了以下代码来映射存储中的所有文件:

private List<File> getListFiles(File parentDir) {
    ArrayList<File> inFiles = new ArrayList<File>();
    File[] files = parentDir.listFiles();
    for (File file : files) {
        if (file.isDirectory()) {

            inFiles.addAll(getListFiles(file));
        } else {

                inFiles.add(file);

        }
    }
    return inFiles;
}

我正在使用它作为

JSONArray jarray=new JSONArray(getListFiles(Environment.getExternalStorageDirectory()));

我面临的问题是我在json对象中获取了整个文件路径。但我需要的是文件和目录的有序Json结构(仅限名称和子目录),排除整个文件路径。我试图使用模型来映射文件和目录,如下所示

    public class BasiDir {
List<BasiDir> subDir;
String name;
List<FileInside> files;
/**
 * @return the subDir
 */
public List<BasiDir> getSubDir() {
    return subDir;
}
/**
 * @param subDir the subDir to set
 */
public void setSubDir(List<BasiDir> subDir) {
    this.subDir = subDir;
}
/**
 * @return the name
 */
public String getName() {
    return name;
}
/**
 * @param name the name to set
 */
public void setName(String name) {
    this.name = name;
}
/**
 * @return the files
 */
public List<FileInside> getFiles() {
    return files;
}
/**
 * @param files the files to set
 */
public void setFiles(List<FileInside> files) {
    this.files = files;
}
}



    public class FileInside {
    String filepath,filename;

    /**
     * @return the filename
     */
    public String getFilename() {
        return filename;
    }

    /**
     * @param filename the filename to set
     */
    public void setFilename(String filename) {
        this.filename = filename;
    }

}

但我大部分时间都在混淆使用它们,任何人都可以指出我可以完成这项任务的正确方向,也欢迎任何第三方图书馆的链接

修改

我要求的格式如下: (对于包含两个文件和子目录的目录)

{  
   "root":[  
      {  
         "filename":"a.txt"
      },
      {  
         "filename":"b.txt"
      },
      {  
         "dirA":[  
            {  
               "filename":"c.txt"
            },
            {  
               "filename":"d.txt"
            }
         ]
      }
   ]
}

1 个答案:

答案 0 :(得分:2)

感谢greenapps向我询问所需的json,只有这样我才能消除混乱并调整这样的功能: -

private Dir getListFiles(File parentDir) {
        Dir d=new Dir();
        d.setDirName(parentDir.getName());
        ArrayList<Dir> inDirs = new ArrayList<Dir>();
        ArrayList<MyProject.file.transfer.File> inFiles = new ArrayList<MyProject.file.transfer.File>();
        File[] files = parentDir.listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                inDirs.add(getListFiles(file));

            } else {
                MyProject.file.transfer.File f=new MyProject.file.transfer.File();
                f.setFilename(file.getName());
                f.setPath(file.getAbsolutePath());
                    inFiles.add(f);

            }
        }

        d.setFiles(inFiles);
        d.setSubDirs(inDirs);
        return d;
    }

模型类: -

1.Dir.java

public class Dir {
String DirName;
List<File> Files;
List<Dir> SubDirs;
/**
 * @return the dirName
 */
public String getDirName() {
    return DirName;
}
/**
 * @param dirName the dirName to set
 */
public void setDirName(String dirName) {
    DirName = dirName;
}
/**
 * @return the files
 */
public List<File> getFiles() {
    return Files;
}
/**
 * @param files the files to set
 */
public void setFiles(List<File> files) {
    Files = files;
}
/**
 * @return the subDirs
 */
public List<Dir> getSubDirs() {
    return SubDirs;
}
/**
 * @param subDirs the subDirs to set
 */
public void setSubDirs(List<Dir> subDirs) {
    SubDirs = subDirs;
}

}

2.File.java

public class File {
    String filename;
    String path;
    /**
     * @return the filename
     */
    public String getFilename() {
        return filename;
    }
    /**
     * @param filename the filename to set
     */
    public void setFilename(String filename) {
        this.filename = filename;
    }
    /**
     * @return the path
     */
    public String getPath() {
        return path;
    }
    /**
     * @param path the path to set
     */
    public void setPath(String path) {
        this.path = path;
    }


}

我和Gson一样使用它:

String json=new Gson().toJson(getListFiles(new File(Environment.getExternalStorageDirectory())),Dir.class);

我会删除它,但我只是在这里保留问题 希望这可能在将来帮助其他人