2015-04-07 47 views
0

我在做一個項目,用戶可以在互聯網上發放的文件系統訪問給第三方,我寫了下面的代碼在存儲中的所有文件映射:映射存儲結構,以JSON格式的Android

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

那麼舉一個你如何看待json文本的例子吧。 – greenapps

+0

請參閱編輯 – insomniac

回答

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

我已經刪除了它,但我只是保持的問題在這裏 希望這可以幫助別人,將來