跳转到主内容
极星编程网:以代码为星,赴技术山海!

Android raw文件夹读取xml 获取res/raw目录下xml文件流

应使用Resources.openRawResource(R.raw.xxx)获取XML输入流,确保文件名小写且路径正确;动态场景用getIdentifier()检索ID;大文件需openRawResourceFd()获取AssetFileDescriptor;协程中应在IO线程解析并妥善关闭流。 如果您在Android开发中尝试从res/raw目录读取XML文件并获取其输入流,但无法正确获取资源ID或流对象,则可能是由于资源引用方式错误或上下文未正确传递。以下是实现此功能的步骤: 一、使用Resources.openRawResource()方法 该方法通过R.raw资源ID直接打开raw目录下指定XML文件的InputStream,是官方推荐的底层读取方式,适用于已知资源名称且编译时确定的场景。 1、确认XML文件已放入
app/src/main/res/raw/
目录下,例如命名为 config.xml ,且文件名全为小写字母、数字或下划线。 2、在Java代码中调用
getResources().openRawResource(R.raw.config)
,其中
R.raw.config
由aapt自动生成,确保无拼写错误。 3、将返回的InputStream包装为XmlPullParser或BufferedReader进行解析,例如:
Xml.newPullParser().setInput(inputStream, "UTF-8")
。 4、使用完毕后必须显式调用
inputStream.close()
,避免资源泄漏。 二、使用Resources.getIdentifier()动态获取资源ID 当XML文件名在运行时才确定(如从参数传入),无法直接使用R.raw.xxx时,可通过资源名称字符串动态检索ID,再调用openRawResource。 1、调用
getResources().getIdentifier("config", "raw", getPackageName())
,传入文件名(不含扩展名)、资源类型"raw"及当前包名。 2、检查返回值是否大于0,若为0说明未找到对应资源,需验证文件名大小写与路径是否匹配。 3、若ID有效,执行
getResources().openRawResource(id)
获取InputStream。 4、 注意:getIdentifier性能较低,不应在循环或高频调用路径中使用 。 Android开发教程与笔记pdf版 Android文件存取与数据库编程知识,文件操作主要是读文件、写文件、读取静态文件等,同时还介绍了创建添加文件内容并保存,打开文件并显示内容;数据库编程方面主要介绍了SQLite数据库的使用、包括创建、删除、打开数据库、非查询SQL操作指令、查询SQL指令-游标Cursors等知识。 下载 三、使用Context.getResources().openRawResourceFd()获取AssetFileDescriptor 该方法返回AssetFileDescriptor,适用于需要随机访问或获取文件长度的场景,例如处理大型XML或需seek操作的情况。 1、调用
getResources().openRawResourceFd(R.raw.config)
获取AssetFileDescriptor对象。 2、调用
afd.createInputStream()
获取InputStream,或使用
afd.getDeclaredLength()
获取原始文件大小。 3、使用完毕后必须同时关闭InputStream和调用
afd.close()
。 4、 注意:若XML文件被aapt压缩(如未列入res/raw/nodpi/等防压缩目录),getDeclaredLength可能返回-1 。 四、Kotlin协程中安全读取raw XML流 在协程作用域内异步读取可避免主线程阻塞,尤其适用于解析较大数据量的XML文件。 1、在lifecycleScope或viewModelScope中启动IO协程:
launch(Dispatchers.IO) { ... }
。 2、在协程体中调用
resources.openRawResource(R.raw.config)
获取流。 3、使用
InputStreamReader
与
XmlPullParser
逐节点解析,避免一次性加载全部内容到内存。 4、捕获
Resources.NotFoundException
和
IOException
,并在finally块中关闭流。

相关文章