Создание файлов активов Android - PullRequest
0 голосов
/ 03 января 2012

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

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

1 Ответ

0 голосов
/ 03 января 2012

Проблема в том, что ресурсы не являются файлами. Эквивалент 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/....

...