Kotlin 37. Android,Assets 以及 Res/raw 文件夹下存放调用文件介绍及对比

一起来学Kotlin:概念:24. Assets 以及 Res/raw 文件夹下存放调用文件介绍及对比

有些时候,我们需要将一些文件(e.g. JSON, Text, mp3, pdf, txt, etc)存放在某些特定文件夹下,方便调用。这里有两种可能性:放在 assets 文件夹下,或者放在 res/raw 文件夹下。一个简单的结论是,两个文件夹下都可以放置,读取各种后缀的文件,但两者也有一些区别,罗列如下:

  • assets文件夹下可以设置更灵活的文件名
  • assets文件夹下允许新建子文件夹
  • assets文件夹下允许在运行(run time)时列出文件名
  • res/raw 支持自动加载不同配置的文件
  • res/raw 从XML文件读取其文件夹中文件更容易


1 如何创建 assets 以及 res/raw 文件夹

请添加图片描述

如上图所示,我们可以对项目的 app 文件夹右键,New->Folder,然后就能看到 Assets Folder 以及 Raw Resource Folder 了。

2 如何读取 assets 以及 res/raw 文件夹里的文件

比如,我们创建了上述两个文件夹后,在文件夹里均创建一个文件,命名为 config.properties。两种调用方式比较类似,罗列如下:

val asset_read_string = applicationContext.assets.open("config.properties").bufferedReader().use{
    it.readText()
}

val raw_read_string = applicationContext.resources.openRawResource(R.raw.config).bufferedReader().use{
    it.readText()
}

3 区别1:assets文件夹下可以设置更灵活的文件名

assets文件夹下可以更宽松地命名文件,比如有一个空格(例如 some file name),或者有大写字母(例如 someFileName)。

res/raw 文件夹下的文件命名比较严格:File-based resource names must contain only lowercase a-z, 0-9, or underscore。应该是因为调用的时候需要以 R.raw.XXX 的形式。

4 区别2:assets文件夹下允许新建子文件夹

比如下图:

请添加图片描述

对于 res/raw 文件夹,这是不允许的。

5 区别3:assets文件夹下允许在运行(run time)时列出文件名

如果我们想列出 assets 文件夹中的所有文件,我们可以使用 list 功能并提供文件夹名称(或 “” 代表根目录。注意,list函数输入的是一个string,所以如果我们想要列出比如 assets 文件夹下的 assets1 子文件夹内的文件,这里的输入需要加双引号:"assets1")。

assets.list("root_folder_name_in_assets")?.forEach { 
    println(it)
}

对于 res/raw 文件夹,这是不可能的,我们必须在开发期间(compile)知道文件名,而不是运行时(run time)。

6 区别4:res/raw 支持自动加载不同配置的文件

对于 assets 文件夹,如果我们想为不同的配置(设备的语言、Android API、屏幕方向)读取不同的文件,我们需要手动检测配置并读取相应的文件。

但是对于 res/raw 文件夹则不需要。下面是一个例子:

请添加图片描述

对于 API 29,可能我们会有一些配置文件,但设备 API高于29,我们也会有一些配置文件。这个时候,系统就会出现两个 raw 文件。和 res 下面的其他文件夹一样,我们不需要手动去选择或进行配置。

7 区别5:res/raw 从XML文件读取其文件夹中文件更容易

对于 assets 文件夹,我们好像没有简单的方法可以让 XML 文件(例如 AndroidManifest.xml)直接读取 assets 下的文件。但对于 res/raw 就很方便,我们直接使用 @raw/filename 就可以。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

破浪会有时

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值