You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 10:42:19