问题:在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、截图
4、注意 上面的代码就是在Download目录下写入文件,要在其他共享目录下写文件把uri换成对应目录的即可。另外还需要权限ohos.permission.WRITE_USER_STORAGE,ohos.permission.WRITE_MEDIA。
说明: 关于沙箱机制的更多消息,华为官方人员表示,HarmonyOS后续版本的文件管理会用到沙箱机制。 |