2012-01-03 4 views
0

Я Buiding приложение, что он делает это сканирование в папку rootсоздание активов файла андроид

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")); .so мой вопрос, как сделать Я делаю это в Android? или, если быть более точным, как создать файл, указывающий на папку root, расположенную в assets, чтобы он «отсканировал» мой код. Я уже пробовал seedData(1, new File("/assets/root"));, но он просто не работал. Любая помощь будет высоко оценена.

Примечание: Нет, я не могу сохранить пути вручную, так как в этих подпапках есть более 3k текстовых файлов.

ответ

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

Для справки, формат URI для активов в папке «корень» file:///android_asset/root/....

+0

Единственное, что кажется, состоит в том, что если есть пустая директория, она будет «нажата» в базу данных правильно? :/ – Raykud

+0

@Raykud - Возможно, вы могли бы избежать регистрации пустых каталогов, проверив само имя; если он не имеет расширения, это пустой каталог вместо файла. В противном случае я не знаю, как избежать этой проблемы. –

Смежные вопросы