我有一个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文件夹的布局
您能否告诉我如何将res / raw目录的全部内容复制到内部存储?
答案 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方法,使其递归并列出资产中的文件。