云网牛站
所在位置:首页 > HarmonyOS问题与回答 > 鸿蒙HarmonyOS中在Download等共享目录下写入文件的代码

鸿蒙HarmonyOS中在Download等共享目录下写入文件的代码

2021-07-28 16:28:03作者:稿源:HarmonyOS站

问题:在Download等共享目录下写入文件的代码是什么?请给出。

 

回答:

1、说明

鸿蒙HarmonyOS中应该也是使用了沙箱机制,应用只能在自己的私有目录下创建文件,在共享目录下(共享目录有这些Documents,Download,Movies,Music,Pictures)使用File的mkdirs()和createNewFile()方法都是无法创建文件的,会报没有权限。如果想要在共享目录下创建文件,可以利用DataAbilityHelper来实现。DataAbilityHelper和Android中的媒体库是一样的作用,用法和媒体库是差不多的。

2、代码

DataAbilityHelper helper = DataAbilityHelper.creator(GlobalContext.getInstance());

//Download目录的uri

Uri uri = AVStorage.Downloads.EXTERNAL_DATA_ABILITY_URI;

ValuesBucket values = new ValuesBucket();

try {

    //待创建的文件名

    values.putString(AVStorage.Downloads.DISPLAY_NAME, name);

    //文件格式

    values.putString(AVStorage.Downloads.MIME_TYPE, "image/jpeg");

    //向DataAbilityHelper中插入文件信息,插入成功后会返回文件的id

    int id = helper.insert(uri, values);

    //通过id拼接文件的uri

    Uri newUri = Uri.appendEncodedPathToUri(uri, String.valueOf(id));

    //通过uri打开文件,得到文件描述符,从而创建输出流

    FileDescriptor fd = helper.openFile(newUri, "rw");

    FileOutputStream os = new FileOutputStream(fd);

    //写入文件数据

    os.write(body.bytes());

    os.flush();

    os.close();

} catch (DataAbilityRemoteException e) {

    e.printStackTrace();

} catch (FileNotFoundException e) {

    e.printStackTrace();

} catch (IOException e) {

    e.printStackTrace();

}

3、截图

鸿蒙HarmonyOS中在Download等共享目录下写入文件的代码

4、注意

上面的代码就是在Download目录下写入文件,要在其他共享目录下写文件把uri换成对应目录的即可。另外还需要权限ohos.permission.WRITE_USER_STORAGE,ohos.permission.WRITE_MEDIA。

 

说明:

关于沙箱机制的更多消息,华为官方人员表示,HarmonyOS后续版本的文件管理会用到沙箱机制。

精选文章
热门文章