本节演示如何通过DataAbilityHelper类访问当前应用的文件数据。采用Car设备类型,创建一个名为DataAbilityHelperAccessFile的应用。
在DevEco Studio中,可以通过图5-20所示方式创建一个Empty Data Ability。
图5-20 创建一个Empty Data Ability
根据图5-21所示引导,创建一个名为UserDataAbility的Data。
图5-21 创建一个名为UserDataAbility的Data
UserDataAbility代码如下:
在创建的时候就会自动生成了一些代码,包括基本的增删改查、打开文件、获取 URI 类型、获取文件类型、还有一个回调。再加上一个onStart方法,总共是9个。
UserDataAbility自动在配置文件中添加了相应的配置,内容如下:
从上述配置可以看出,type类型设置为data;uri为对外提供的访问路径,全局唯一;permis-sions为访问该Data Ability时需要申请的访问权限。
由于本示例只涉及文件,因此修改UserDataAbility时只需重写onStart()和openFile()方法,代码如下:
上述代码中:
(1)initFile()方法用于将源文件写入目标文件。this.getDataDir()方法可以获取数据目录,目标文件最终写入该目录下。
(2)HarmonyOS提供了一个ResourceManager资源管理器,通过该资源管理器可以方便地读取resouece目录下的资源文件。其中,RawFileEntry代表rawfile目录下的文件。可以通过rawFi-leEntry.openRawFile()方法方便地获取指定文件。
(3)在方法返回前,需要通过MessageParcel对FileDescriptor进行复制。
在resouece目录的rawfile目录下创建图5-22所示的测试用文件。
图5-22 测试用文件
该文件的测试内容比较简单,就是一个用户的名字,代码如下:
修改MainAbilitySlice的onStart()方法,代码如下:
上述代码中:
(1)在Text中添加单击事件,触发访问文件的操作。
(2)getFile()方法用于访问文件。借助DataAbilityHelper类的openFile()方法,访问当前User-DataAbility提供的文件数据。
(3)FileUtils.getFileContent()方法用于将文件内容转为字符串,这样可以在日志中方便查看文件的具体内容。FileUtils工具类将在5.10.5小节介绍。
注意:上述代码中访问的URI与UserDataAbility在配置文件中的添加的URI基本一致,唯一的区别是上述代码中访问的URI用三个斜杠。
FileUtils类是一个工具类,其中getFileContent()方法用于将文件内容转为字符串,代码如下:
运行应用后,效果如图5-23所示。
图5-23 应用运行效果
单击文本Hello World,触发访问文件操作,可以看到控制台HiLog输出内容如下:
至此,DataAbilityHelper访问文件的示例演示完毕。