sdcard中的文件列表,用json返回一些空值

时间:2014-09-27 21:05:11

标签: android json

public class FileUtil {

public static String getJson(Context context,String path) throws JSONException {
    JSONObject jo = new JSONObject();
    JSONArray files = new JSONArray();
    JSONArray directory = new JSONArray();
    File folder = new File(path);
    File[] listOfFiles = folder.listFiles();
    for (int i = 0; i < listOfFiles.length; i++) {
        if (listOfFiles[i].isFile()) {

            JSONObject entry=new JSONObject();              
            entry.put("name", listOfFiles[i].getName());
            entry.put("path", listOfFiles[i].getAbsolutePath());
            entry.put("size", readableFileSize(listOfFiles[i].length()));
            entry.put("dateModified",readabledateMod(listOfFiles[i]) );     

            files.put(i, entry);

        } else {

            JSONObject entry=new JSONObject();      
            entry.put("name", listOfFiles[i].getName());
            entry.put("path", listOfFiles[i].getAbsolutePath());
            entry.put("size", readableFileSize(listOfFiles[i].length()));
            entry.put("dateModified",readabledateMod(listOfFiles[i]) );
            entry.put("filesNumber", Integer.toString(listOfFiles[i].listFiles().length));
          //entry.put("directorySize",readableFileSize(folderSize(listOfFiles[i])));

            directory.put(i, entry);
        }
    }
    jo.put("files", files);
    jo.put("directory",directory);
    return jo.toString();
 }

}

输出:

{
"files":
[
null,null,
{"path":"\/sdcard\/json.txt","dateModified":"21\/09\/2014","size":"196B","name":"json.txt"},
null,null,null, 
{"path":"\/sdcard\/a.txt","dateModified":"28\/09\/2014","size":"3 B","name":"a.txt"},
null,null
],

"directory":
..............................
.........................
}

我正在尝试以json格式获取文件列表。使用arraylist工作正常但是使用json它会给我一些空值... 为什么返回一些值null我怎么能修复这个我尝试entry.equals(null)但所有那些不起作用请帮助

1 个答案:

答案 0 :(得分:2)

问题是这个

files.put(i, entry);

使用完整列表的索引作为放置条目的索引。因此,对于它找到的每个目录,您都会跳过文件列表中的一个位置。

只需使用

files.put(entry);

当然,directory.put(i, entry);

也是如此