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 文件夹,这是不允许的。

扫描二维码关注公众号,回复: 16108172 查看本文章

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 就可以。

猜你喜欢

转载自blog.csdn.net/zyctimes/article/details/129178353