我正在做一个项目,用户可以通过互联网向第三方授予文件系统访问权限,我编写了以下代码来映射存储中的所有文件:
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"
}
]
}
]
}
答案 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);
我会删除它,但我只是在这里保留问题 希望这可能在将来帮助其他人