【问题标题】:How can I copy the whole content of a directory from raw resources to internal storage如何将目录的全部内容从原始资源复制到内部存储
【发布时间】:2014-07-02 07:32:39
【问题描述】:

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

我需要在安卓浏览器中打开这个文件。所以,我将此文件复制到 sdcard 中。

但如果我使用 R.raw.index 索引文件只复制其他文件不复制。 由于其他 html 和图像没有复制到 sdcard:我在浏览器中打开 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 目录的全部内容复制到内部存储吗?

【问题讨论】:

  • 你有问题要问吗?
  • 我问了我的问题。你不明白吗?
  • 我没有看到问号。当我阅读您的问题时,这是我可以制作的摘要:“我仅将一个文件从原始资源复制到内部存储,并且在复制之后:仅将一个文件复制到内部存储”(那么这里的问题是什么?) (您也可以阅读:stackoverflow.com/help/how-to-ask
  • 你能看到我的图片吗?在原始文件夹中,我有其他文件夹和文件。但 index.html 文件只复制到 sdcard。所以我无法获得图像显示和其他页面链接不起作用
  • 所以我建议你用这个标题改进你的问题:“如何将目录的全部内容从原始资源复制到内部存储?”

标签: android html android-resources android-assets


【解决方案1】:

来自android doc about the res/raw folder

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

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

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

完成此操作后,您可以将它们一一复制并递归到内部存储。

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

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

【讨论】:

    猜你喜欢
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    相关资源
    最近更新 更多