我正在建立一个应用程序,它的功能是扫描root
文件夹
然后搜索里面是否有任何文件夹...这样做的目的是保存所有文件夹 数据库中的文本文件路径。数据库将包含文本文件名和路径。
这是代码的一部分:
private void seedData(int indent, File file) throws IOException {
if (file.isDirectory()) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++)
{
seedData(indent + 4, files[i]);
path+=files[i].getPath();
}
}
else{
db.execSQL("insert into "+TABLE+" (title, url) values ('"+
file.getName().substring(0, file.getName().length()-4)+"', '"+file.getPath()+"');");
}
}
但是在普通的Java中我只是用路径创建一个File,然后将它发送到类似的方法
这个:seedData(1, new File("/root"));
。所以我的问题是,如何在Android中执行此操作?或者更确切地说,如何创建一个指向root
assets
文件夹的文件,以便我的代码“扫描”它。我已经尝试了seedData(1, new File("/assets/root"));
,但它没有用。
任何帮助将不胜感激。
注意:不,我无法手动保存路径,因为所有子文件夹中都有超过3k的文本文件。
答案 0 :(得分:0)
这里的问题是资产不是文件。上述方法的Android等价物将是这样的:
private void seedData(int indent, String path, AssetManager mgr)
throws IOException
{
String[] list = mgr.list(path);
if (list.length > 0) {
// path is a directory with something in it
for (String item : list) {
seedData(indent + 4, path + "/" + item, mgr);
}
} else {
// path is either an empty directory or a file
// unfortunately, Android makes it hard to distinguish
String name = path.substring(path.lastIndexOf('/') + 1);
db.execSQL("insert into "+TABLE+" (title, url) values ('"
+name.substring(0, name.length()-4)+"', '"
+path+"');");
}
}
您可以通过
来调用此活动seedData(0, "root", getAssets());
作为参考,“root”文件夹中资产的URI格式为file:///android_asset/root/...
。