React Native中如何用react-native-fs访问隐藏文件夹(Scoped Storage权限)
React Native中Scoped Storage权限下通过react-native-fs访问隐藏文件夹
核心前提说明
Scoped Storage(Android 10+)限制了直接通过绝对路径访问外部存储,隐藏文件夹也无法通过传统路径直接访问,必须借助Storage Access Framework (SAF) 配合react-native-fs的SAF适配方法来操作。
1. 授予目标文件夹Scoped Storage权限后访问隐藏文件夹的步骤
步骤1:获取隐藏文件夹的SAF Uri
需要让用户通过系统文件管理器选择目标隐藏文件夹(注意:需先在系统文件管理器中开启「显示隐藏文件」选项,否则无法看到并选中隐藏文件夹)。可以通过原生模块或第三方库触发SAF选择器,获取文件夹的Uri。步骤2:使用react-native-fs的SAF方法访问文件夹
确保使用的react-native-fs版本支持SAF操作(建议v2.20.0及以上),调用对应的SAF方法进行文件操作:import RNFS from 'react-native-fs'; // 替换为通过SAF获取到的隐藏文件夹Uri const hiddenFolderUri = "content://com.android.externalstorage.documents/tree/primary%3A.hiddenFolder/document/primary%3A.hiddenFolder"; // 读取隐藏文件夹内的文件列表 RNFS.readDirSAF(hiddenFolderUri) .then(files => { console.log("隐藏文件夹内容:", files); }) .catch(err => { console.error("读取失败:", err); }); // 读取隐藏文件夹内的某个文件 const targetFileUri = `${hiddenFolderUri}/secret.txt`; RNFS.readFileSAF(targetFileUri, 'utf8') .then(content => { console.log("文件内容:", content); }) .catch(err => { console.error("读取文件失败:", err); });步骤3:写入操作(可选)
如果需要向隐藏文件夹写入文件,使用writeFileSAF方法:const newFileUri = `${hiddenFolderUri}/new_secret.txt`; RNFS.writeFileSAF(newFileUri, "新的隐藏内容", 'utf8') .then(() => { console.log("写入成功"); }) .catch(err => { console.error("写入失败:", err); });
2. 仅依赖Scoped Storage权限时的访问方式
仅授予Scoped Storage权限(无需申请传统的READ_EXTERNAL_STORAGE/WRITE_EXTERNAL_STORAGE权限)的场景下,上述方法完全适用。Scoped Storage本身就是Android 10+推荐的存储权限模型,只要用户通过SAF选择了目标隐藏文件夹,就可以直接通过react-native-fs的SAF方法进行读写操作,无需额外权限。
内容的提问来源于stack exchange,提问作者Rohit Barate
相关产品推荐
相关产品推荐

