我的android应用程序中的getAssets().list太慢。我有将近3000个文件,在一些设备上,只需要几分钟就可以得到所有的文件名。
所以,我想用python脚本创建一个json文件,里面有文件树,从特定子目录中查找所有文件和目录(名称)一定很容易。你知道吗
因此,没有json的默认实现是这样的:public String[] listAssets(String path) throws IOException {
return getAssets().list(path);
}
现在我必须使用加载的json文件树来查找特定路径的内容
下面是一个python脚本:import os
import json
path = "/Users/xxx/somepath"
def path_to_dict(path):
d = {'name': os.path.basename(path)}
if os.path.isdir(path):
d['type'] = "directory"
d['children'] = [path_to_dict(os.path.join(path,x)) for x in os.listdir\
(path)]
else:
d['type'] = "file"
return d
with open("tree.json", "w") as tf:
tf.write(json.dumps(path_to_dict(path)))
脚本取自stackoverflow。现在,我有一个问题如何解析它:public String[] listAssets(String path) throws IOException {
//return getAssets().list(path);
try {
JSONArray assets = fileTree.getJSONArray("children");
if (path.equals("")) { //asking for root dir
String[] names = new String[assets.length()];
for(int i = 0; i < assets.length(); i++){
names[i] = assets.getJSONObject(i).getString("name");
}
return names;
}
else { //same subdirectory
String[] parts = path.split(Pattern.quote("/"));
JSONArray array = findSubdirectory(parts, 0, assets);
String[] names = new String[array.length()];
for(int i = 0; i < array.length(); i++){
names[i] = array.getJSONObject(i).getString("name");
}
return names;
}
}
catch (Exception e){
e.printStackTrace();
}
return null;
}
我用“/”来分割路径,并且必须以某种方式遍历所有子目录并递归地找到正确的子目录,但是我不知道如何实现这个“findSubdirectory”方法。你知道吗