HarmonyOS 鸿蒙Next 文件管理应用开发,file.listFiles()方法返回null
HarmonyOS 鸿蒙Next 文件管理应用开发,file.listFiles()方法返回null
private static final String EXTERNAL_PATH = “/storage/emulated/0”;
File file = new File(EXTERNAL_PATH); File[] fileArray; if (file.exists()) { fileArray = file.listFiles(); if (fileArray != null) { for (File fileInfo : fileArray){ HiLog.info(logLabel, “fileInfo路径:” + fileInfo.getName()); } } else { HiLog.info(logLabel, “没有文件”); } }
程序一直打印“没有文件”,想了想是不是因为权限问题,所有在config.json中添加了如下权限
"reqPermissions": [ { “name”: “ohos.permission.READ_MEDIA” }, { “name”: “ohos.permission.WRITE_MEDIA” } ]
结果还是一直打印“没有文件”。
麻烦大佬帮忙解答一下,看看是哪里出的问题??
谢谢了····
还有,如何得到鸿蒙内部存储的根目录??
开发者你好,我这边尽量找技术帮你看看~
欢迎更多小伙伴来帮帮楼主吧
大佬···这个还挺着急的····麻烦能不能尽快找个人帮忙看看啊···
谢谢了····
大佬···
啥时候能帮忙解决这个问题啊····
大佬····
这个有解决方案了么???
我不是要开发这个···
我是要开发类似咱华为手机上的文件管理,文件管理里面有个手机存储,可以列出手机内部存储的根目录下的所有文件夹和文件
这样的,file.listFiles()就可以得到当前文件夹下的所有文件,但是在咱们鸿蒙上这个方法返回的是null
File file = new File("/storage/emulated/0");
Android上如果不动态申请"android.permission.READ_EXTERNAL_STORAGE"这个属性file.listFiles()也是空的
动态申请了后file.listFiles()就不为空了,就可以访问到"/storage/emulated/0"下的所有文件了
红框内就是当前文件夹下的所有目录了
我试了一下在鸿蒙上动态申请"ohos.permission.READ_MEDIA" 这个权限,但是file.listFiles()还是空的。
所有想问下鸿蒙侧如何访问当前设备的外部存储根目录
大佬···
啥时候能帮忙解决这个问题啊····
开发者您好,这个问题已经安排研发在分析了,请您耐心等待一下。
找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17
感谢大佬···
有办法了麻烦即时回复一下···
谢谢了····
大佬···
啥时候能帮忙解决这个问题啊····
大佬····
这个有解决方案了么???
开发者您好, 读取用户外部存储中的媒体文件信息需要申请ohos.permission.READ_MEDIA权限,而ohos.permission.READ_MEDIA权限属于敏感权限,不仅需要在config.json文件中声明所需要的权限,还需要在代码中动态申请,由用户点击同意后方可使用。
动态权限申请开发步骤可参看开发者文档 https://developer.harmonyos.com/cn/docs/documentation/doc-guides/security-permissions-guidelines-0000000000029886
按照你说的动态申请了ohos.permission.READ_MEDIA权限
但是file.listFiles()还是返回null
鸿蒙上申请ohos.permission.READ_MEDIA权限后
Android上申请android.permission.READ_EXTERNAL_STORAGE权限后
Android申请的权限比鸿蒙上的多一个“文件”
是不是鸿蒙上这个“文件”的权限是另外一个呢???
就我所知,存储API方案还未定。利用File的接口+读写权限目前是不行的,以后可能也不会可行。貌似内部在考虑使用苹果的存储方式。我倒是期望能与Android的SAF框架保持相近。总之第三方文件管理器,以目前的形式及以后的发展看,直接Over。又或许会出现什么新的高招?总之这一块不乐观。
感谢解答,如果按你说的这个方向发展,那好多厂商对文件管理这里就很难受了吧,比如扫毒,垃圾清理等等··
请问一下鸿蒙系统上如果删除图片,通过改命令,报没有权限。
已经动态申请了
verifySelfPermission(SystemPermission.READ_MEDIA) verifySelfPermission(SystemPermission.WRITE_MEDIA
DataAbilityHelper helper = DataAbilityHelper.creator(mContext);
helper.delete(
Writing exception to parcel
09-22 21:26:16.348 4718-4742/? E DatabaseUtils: android.app.RecoverableSecurityException: org.horaapps.leafpic has no access to content://media/external/images/media/871
09-22 21:26:16.348 4718-4742/? E DatabaseUtils: at com.android.providers.media.MediaProvider.enforceCallingPermissionInternal(MediaProvider.java:9035)
09-22 21:26:16.348 4718-4742/? E DatabaseUtils: at com.android.providers.media.MediaProvider.enforceCallingPermission(MediaProvider.java:8954)
09-22 21:26:16.348 4718-4742/? E DatabaseUtils: at com.android.providers.media.MediaProvider.deleteInternal(MediaProvider.java:6803)
09-22 21:26:16.348 4718-4742/? E DatabaseUtils: at com.android.providers.media.MediaProvider.delete(MediaProvider.java:6705)
09-22 21:26:16.348 4718-4742/? E DatabaseUtils: at android.content.ContentProvider$Transport.delete(ContentProvider.java:404)
09-22 21:26:16.348 4718-4742/? E DatabaseUtils: at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:19
我读指定文件时候用的 “/sdcard/Movies/xxxx.mp4”能读到文件
但是读目录下文件列表也是null
File file = new File("/sdcard/Movies/"); String[] files = file.list(); if (files != null) { for (String f : files) { LogUtil.info(TAG, f); } }
用这个权限就可以了
你的是正解,尤其是对我这种用android studio开发兼容鸿蒙的很有帮助,谢谢!
在HarmonyOS鸿蒙Next的文件管理应用开发中,如果file.listFiles()
方法返回null
,这通常表明指定的路径不存在、没有读取权限或路径指向的是一个文件而非目录。以下是几个可能的解决方案:
-
确认路径正确:确保传递给
listFiles()
方法的路径确实是一个目录路径。可以使用file.isDirectory()
来检查该路径是否为一个目录。 -
检查权限:确保应用已经获得了对目标路径的读取权限。在HarmonyOS中,需要在
config.json
文件中声明相应的权限,如ohos.permission.READ_EXTERNAL_STORAGE
,并在运行时请求权限。 -
路径存在性:使用
file.exists()
来验证路径是否存在。如果路径不存在,需要先创建目录或确保路径正确。 -
设备兼容性:检查该行为是否在特定设备或系统版本上独有。有时,设备制造商的修改可能影响标准API的行为。
-
错误处理:添加适当的错误处理逻辑,如日志记录,以便在
listFiles()
返回null
时能够捕获并处理异常。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。