文件创建资产的Android

问题描述:

我层楼高的应用程序,它的作用是扫描root文件夹文件创建资产的Android

Assets

,然后它会搜索是否有任何文件夹内......这样做的目的是为了将所有 文本文件路径保存在数据库中..数据库将包含文本文件名称和路由。

这部分代码:

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我只是创建一个文件的路径,然后将其发送到方法类似 这样的:seedData(1, new File("/root"));。所以我的问题是,怎么办我在Android中这样做?或者更确切地说,我如何创建一个指向位于assetsroot文件夹的文件,以便通过我的代码进行“扫描”。我已经试过seedData(1, new File("/assets/root"));但它只是没有工作。 任何帮助将不胜感激。

注意:不,我无法手动保存路径,因为所有这些子文件夹中都有超过3k个文本文件。

这里的问题是资产不是文件。你以上的方法的安卓相当于将是这样的:

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

仅供参考调用该从你的活动,在“根”文件夹中的URI格式资产file:///android_asset/root/...

+0

似乎唯一的事情是,如果有一个空目录,它将被“推”到数据库中吗? :/ – Raykud 2012-01-03 19:26:12

+0

@Raykud - 也许你可以通过检查名字本身来避免注册空目录;如果它没有扩展名,它是一个空目录而不是文件。否则,我不知道一个办法来避免这个问题。 – 2012-01-03 23:02:25