Android 中资源文件夹RES/RAW和ASSETS的使用区别

文章目录

在Android开发中,res/raw和assets文件夹分别用于存储不同类型的资源文件。它们的使用方法和适用场景各有不同。以下是对这两个文件夹的详细解析,包括它们的用途、访问方式、使用场景、优缺点以及一些高级用法。

1、res/raw 文件夹

res/raw 文件夹用于存放原始的、未经处理的资源文件,例如音频文件、视频文件和纯文本文件。这些文件在编译时不会被处理成其他格式,而是以原样保留。

1.1、特点

*文件名要求 :文件名必须由小写字母、数字和下划线组成。

*资源ID :在R类中生成资源ID,通过资源ID访问文件。

*编译处理:资源文件会在编译时打包到APK中,可以通过资源ID直接访问。

1.2、使用方法

1、放置文件:

将资源文件放入res/raw文件夹中。例如,将音频文件sample.mp3放入res/raw。

2、访问资源:

通过Resources类的openRawResource方法访问资源。

java 复制代码
InputStream inputStream = getResources().openRawResource(R.raw.sample);

1.3、示例:

1、读取文本文件

假设在res/raw文件夹中有一个文本文件example.txt,读取文件内容的代码如下:

java 复制代码
try {
    InputStream inputStream = getResources().openRawResource(R.raw.example);
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
    StringBuilder stringBuilder = new StringBuilder();
    String line;
    while ((line = reader.readLine()) != null) {
        stringBuilder.append(line);
    }
    reader.close();
    String fileContent = stringBuilder.toString();
} catch (IOException e) {
    e.printStackTrace();
}

2、播放音频文件

假设在res/raw中有一个音频文件sound.mp3,可以通过以下代码播放它:

java 复制代码
MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.sound);
mediaPlayer.start();

2. assets 文件夹

assets 文件夹用于存放应用程序的原始文件,可以包含复杂的文件夹结构,非常适合存放需要分层组织的资源,如HTML文件、字体、配置文件等。

2.1、特点

*支持文件夹层次结构 :可以包含子文件夹和多层次结构。

*文件名要求 :没有严格的命名要求,文件名可以包含大写字母和特殊字符。

*动态访问:通过AssetManager类动态访问文件。

2.2、使用方法

1、放置文件:

将资源文件放入assets文件夹中。例如,将配置文件settings.json放入assets/config文件夹中。

2、访问资源:

通过AssetManager类的open方法访问资源。

java 复制代码
AssetManager assetManager = getAssets();
InputStream inputStream = assetManager.open("config/settings.json");

2.3、示例:

1、读取JSON配置文件

假设在assets文件夹中有一个配置文件config/settings.json,读取文件内容并解析JSON的代码如下:

java 复制代码
try {
    AssetManager assetManager = getAssets();
    InputStream inputStream = assetManager.open("config/settings.json");
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
    StringBuilder stringBuilder = new StringBuilder();
    String line;
    while ((line = reader.readLine()) != null) {
        stringBuilder.append(line);
    }
    reader.close();
    String jsonString = stringBuilder.toString();
    JSONObject jsonObject = new JSONObject(jsonString);
    // 解析jsonObject,获取配置信息
} catch (IOException | JSONException e) {
    e.printStackTrace();
}

2、从 assets 加载 HTML 文件

假设有一个 HTML 文件 webpage.html 存放在 assets 文件夹中,可以使用 WebView 加载它:

java 复制代码
WebView webView = findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("file:///android_asset/webpage.html");

3、使用场景

3.1、res/raw 使用场景

*音频文件 :存放音频文件,如res/raw/sound.mp3。
*视频文件 :存放视频文件,如res/raw/video.mp4。
*纯文本文件:存放纯文本文件,如res/raw/readme.txt。

3.2、assets 使用场景

*复杂文件结构 :需要分层组织的资源,如assets/html/index.html。
*配置文件 :存放JSON、XML等配置文件,如assets/config/settings.json。
*字体文件 :存放自定义字体文件,如assets/fonts/custom_font.ttf。

4、比较与选择

5、文件夹选择的建议

*文件组织需求:如果需要分层次组织资源文件,选择assets;否则选择res/raw。

*访问方式:如果希望通过资源ID快速访问,选择res/raw;如果需要通过文件路径灵活访问,选择assets。

*文件大小和类型:对于大型文件和特定类型的文件(如HTML、JSON等),通常放在assets更为合适。

6、 示例代码总结

6.1、res/raw 示例

java 复制代码
// 读取res/raw/example.txt文件内容
try {
    InputStream inputStream = getResources().openRawResource(R.raw.example);
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
    StringBuilder stringBuilder = new StringBuilder();
    String line;
    while ((line = reader.readLine()) != null) {
        stringBuilder.append(line);
    }
    reader.close();
    String fileContent = stringBuilder.toString();
} catch (IOException e) {
    e.printStackTrace();
}

6.2、assets 示例

java 复制代码
// 读取assets/config/settings.json文件内容并解析JSON
try {
    AssetManager assetManager = getAssets();
    InputStream inputStream = assetManager.open("config/settings.json");
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
    StringBuilder stringBuilder = new StringBuilder();
    String line;
    while ((line = reader.readLine()) != null) {
        stringBuilder.append(line);
    }
    reader.close();
    String jsonString = stringBuilder.toString();
    JSONObject jsonObject = new JSONObject(jsonString);
    // 解析jsonObject,获取配置信息
} catch (IOException | JSONException e) {
    e.printStackTrace();
}

7、高级用法和注意事项

7.1、res/raw 文件夹的限制

文件名要求严格 :必须由小写字母、数字和下划线组成,不能包含大写字母和特殊字符。
路径访问受限:不能通过文件路径访问,必须通过资源ID访问。

7.2、assets 文件夹的高级用法

文件夹结构 :支持子文件夹和多层次结构,非常适合存放需要分类的资源,如HTML文件、字体、配置文件等。
灵活性:可以动态读取和解析文件内容,适合在运行时需要根据具体情况处理资源的场景。

8、总结

在Android开发中,选择使用res/raw还是assets文件夹取决于具体需求:
*res/raw:适用于简单的资源文件,文件名有严格要求,通过资源ID访问。
1、优点:直接通过资源ID访问,性能较好。
2、缺点:不支持复杂的文件夹结构,文件名有严格要求。
3、适用场景:简单资源文件,如音频、视频、文本等

*assets:适用于复杂的资源文件,支持文件夹层次结构,通过文件路径动态访问。
通过合理选择和使用这两个文件夹,可以实现更高效的资源管理和访问,提升应用的组织性和性能。
1、优点:支持复杂的文件夹结构,通过文件路径灵活访问。
2、缺点:需要通过 AssetManager 访问,略微复杂。
3、适用场景:复杂资源文件,大型数据文件,需要动态加载的文件。

理解 res/raw 和 assets 文件夹的区别和使用方法,有助于更好地管理应用资源,提高开发效率和应用性能。通过合理选择和使用这两种文件夹,可以实现更灵活的资源管理方案。

|----------------------------------|
| 欢迎点赞|关注|收藏|评论,您的肯定是我创作的动力 |

相关推荐
后端码匠2 小时前
MySQL 8.0安装(压缩包方式)
android·mysql·adb
梓仁沐白4 小时前
Android清单文件
android
董可伦6 小时前
Dinky 安装部署并配置提交 Flink Yarn 任务
android·adb·flink
每次的天空6 小时前
Android学习总结之Glide自定义三级缓存(面试篇)
android·学习·glide
恋猫de小郭7 小时前
如何查看项目是否支持最新 Android 16K Page Size 一文汇总
android·开发语言·javascript·kotlin
flying robot8 小时前
小结:Android系统架构
android·系统架构
xiaogai_gai8 小时前
有效的聚水潭数据集成到MySQL案例
android·数据库·mysql
鹅鹅鹅呢9 小时前
mysql 登录报错:ERROR 1045(28000):Access denied for user ‘root‘@‘localhost‘ (using password Yes)
android·数据库·mysql
在人间负债^9 小时前
假装自己是个小白 ---- 重新认识MySQL
android·数据库·mysql
Unity官方开发者社区9 小时前
Android App View——团结引擎车机版实现安卓应用原生嵌入 3D 开发场景
android·3d·团结引擎1.5·团结引擎车机版