将整个文件夹从R.raw复制到SD

时间:2014-10-09 12:04:15

标签: android android-resources android-assets

我有一个完整的文件夹,我想在R.raw文件夹中,所以它看起来像这样:

raw/thor/myfirstfile.jpg   
raw/thor/mysecondfile.m4a
raw/thor/mythirdfile.json
raw/batman/myfirstfile.jpg
raw/batman/mysecondfile.m4a
raw/batman/mythirdfile.json

这样我就可以将文件夹复制到:

/externalSD/.../themes/thor/myfirstfile.jpg
/externalSD/.../themes/thor/mysecondfile.m4a
/externalSD/.../themes/thor/mythirdfile.json
/externalSD/.../themes/batman/myfirstfile.jpg
/externalSD/.../themes/batman/mysecondfile.m4a
/externalSD/.../themes/batman/mythirdfile.json

我无法将文件夹放入R.assets,因为包含这些资源的项目是一个库,我需要从应用程序项目中访问这些文件。

将所有文件简单地放入raw / assets / drawable / etc目录也不是一个选项,因为主题本质上是设计用于搜索SD卡上的目录的模板,其想法是可以下载更多主题。

目前我的解决方案是将文件夹打包成zip文件:

raw/thor.zip
raw/batman.zip

使用以下方式访问它们:

InputStream fileStream = context.getResources().openRawResource(rawResource);

然后将应用程序的第一次运行解压缩到SD卡上 - 但速度非常慢。它(希望)能够更快地复制文件夹而不是解压缩文件夹。

我的问题是如何从R.raw资源中复制整个文件夹?

1 个答案:

答案 0 :(得分:0)

  

我有一个完整的文件夹,我希望它在R.raw文件夹中,以便它看起来像这样

不支持。您不能在res/raw/中拥有子目录。 assets/可以替代res/raw/

  

我无法将文件夹放入R.assets,因为包含这些资源的项目是一个库,我需要从应用程序项目中访问这些文件。

Android库项目现在支持资产,至少在Android Studio / Gradle for Android上。我最近没在Eclipse上试过它们。

  

我的问题是如何从R.raw资源中复制整个文件夹?

由于您无法将整个文件夹放入res/raw/,因此无法将其复制出来。

欢迎您发明自己的名称修改算法(例如raw/theme___thor___myfirstfile.jpg),只要您坚持使用Java数据成员命名规则即可。然后,您可以在将其写出时将这些文件名转换为相对路径。您需要使用反射迭代R.raw的静态数据成员,以找出名称及其相应的资源ID值。

但是,我建议您首先尝试资产,因为它可能比您预期的更好。或者,如果此库纯粹供您自己使用(即不用于公开发布),则可能切换到Android Studio并使用产品风格而不是应用程序和单独的库。