Как я могу скопировать все содержимое каталога из необработанных ресурсов во внутреннюю память

У меня есть файл index.html и некоторые изображения, отображаемые на этой странице, которые хранятся в папке res/raw.

Мне нужно открыть этот файл в браузере Android. Итак, я копирую этот файл в SD-карту.

Но если я использую R.raw.index, индексный файл копируется, другие файлы не копируются. Поскольку другие html и изображения не копируются на SD-карту: я не вижу изображения, когда открываю index.html в браузере.

Вот мой текущий код для копирования исходного ресурса:

private File copyFile(int resourceId, String filename) {
        InputStream in = null; 
        OutputStream out = null;
        File outFile = null;
        try {
            in = mContext.getResources().openRawResource(resourceId);
            outFile = new File(mContext.getExternalFilesDir(null), filename);
            Log.d("TestHTML", "output file" +  outFile.getAbsolutePath());
            out = new FileOutputStream(outFile);
            byte[] buffer = new byte[1024];
            int read;
            while((read = in.read(buffer)) != -1){
                out.write(buffer, 0, read);
            }
        } catch(IOException e) {
            Log.e("TestHTML", "Failed to copy file", e);
        } finally {
            try {
                in.close();
                out.flush();
                out.close();
                in = null;
                out = null;
            } catch (Exception e){}
        }
        return outFile;
    }

А вот расположение папки res/raw

введите здесь описание изображения

Можете ли вы дать мне подсказку о том, как скопировать все содержимое каталога res/raw во внутреннюю память?


person user3602987    schedule 14.05.2014    source источник
comment
у вас есть вопрос?   -  person ben75    schedule 14.05.2014
comment
Я задал свой вопрос. разве ты не понял?   -  person user3602987    schedule 14.05.2014
comment
Я не вижу вопросительного знака. Когда я прочитал ваш вопрос, вот резюме, которое я могу сделать: я копирую только один файл из необработанных ресурсов во внутреннюю память и после копирования: только один файл копируется во внутреннюю память (и так в чем вопрос?) (вы также можно прочитать это: stackoverflow.com/help/how-to-ask)   -  person ben75    schedule 14.05.2014
comment
Ты видишь мой образ? Внутри необработанной папки у меня есть другие папки и файлы. Но файл index.html копируется только на SD-карту. Поэтому я не могу отобразить изображение, а ссылки на другие страницы не работают.   -  person user3602987    schedule 14.05.2014
comment
Поэтому я предлагаю вам улучшить свой вопрос с этим заголовком: Как я могу скопировать все содержимое каталога из необработанных ресурсов во внутреннюю память?   -  person ben75    schedule 14.05.2014


Ответы (1)


Из документа Android о папке res/raw:

Произвольные файлы для сохранения в необработанном виде. Чтобы открыть эти ресурсы с помощью необработанного InputStream, вызовите Resources.openRawResource() с идентификатором ресурса, которым является R.raw.filename.

Однако, если вам нужен доступ к исходным именам файлов и файловой иерархии, вы можете сохранить некоторые ресурсы в каталоге assets/ (вместо res/raw/). Файлам в assets/ не присваивается идентификатор ресурса, поэтому вы можете прочитать их только с помощью AssetManager.

Поскольку вы будете использовать все это в html: вам нужно сохранить доступ по имени файла. Поэтому не помещайте эти файлы в res/raw. Поместите их в свою папку assets.

Как только это будет сделано, вы можете скопировать их все по одному и рекурсивно во внутреннюю память.

Точка входа для списка файлов в папке некоторых активов — getAssets().list(path), где path обозначает путь к каталогу, содержащему index.html.

Вы также должны обновить свой метод copyFile, чтобы сделать его рекурсивным и отображать файлы из активов.

person ben75    schedule 14.05.2014