如何将目录的全部内容从原始资源复制到内部存储

时间:2014-05-14 09:57:47

标签: android html android-resources android-assets

我有一个index.html文件,此页面上显示的一些图像存储在res / raw文件夹中。

我需要在android浏览器中打开这个文件。所以,我把这个文件复制到sdcard中。

但是如果我使用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文件夹的布局

enter image description here

您能否告诉我如何将res / raw目录的全部内容复制到内部存储?

1 个答案:

答案 0 :(得分:1)

来自android doc about the res/raw folder

  
    

以原始格式保存的任意文件。要使用原始InputStream打开这些资源,请使用资源ID(即R.raw.filename)调用Resources.openRawResource()。

         

但是,如果需要访问原始文件名和文件层次结构,可以考虑在assets /目录中保存一些资源(而不是res / raw /)。资产/中的文件未获得资源ID,因此您只能使用AssetManager读取它们。

  

因为你将在html中使用所有这些东西:你需要通过文件名保持访问权限。 所以不要将这些文件放在res/raw中。将它们放入assets文件夹

完成此操作后,您可以逐个复制所有这些内容并递归复制到内部存储。

列出某些资产文件夹中文件的入口点为getAssets().list(path),其中path表示包含index.html的目录的路径。

您还必须更新copyFile方法,使其递归并列出资产中的文件。