app端读取私有目录配置文件必须用plus.io.requestfilesystem,不可用uni.getfilesystemmanager;需配android/ios权限、用plus.io.private_doc路径、监听onloadend事件才能正确读取json内容。

App端读取私有目录配置文件必须用 plus.io.requestFileSystem
uni.getFileSystemManager 在 App 端根本不可用——它返回的是空对象 {},调用 readFile 会静默失败,控制台既不报错也不进 fail 回调。H5 和小程序能跑,App 打包后就断掉,这是平台能力缺失,不是代码写错了。
正确入口只有 plus.io.requestFileSystem,且必须传 plus.io.PRIVATE_DOC(不能手拼路径,也不能用 PRIVATE_WWW,后者是只读资源目录,写入会失败且不提示)。
- Android 路径示例:
/data/data/[包名]/documents/config.json - iOS 路径示例:
/Documents/config.json - 该目录卸载 App 即清空,适合存敏感配置、用户偏好等
读取 JSON 配置时为什么拿到 undefined?
因为 plus.io.FileReader 是纯回调驱动的异步操作,没有 Promise 封装。在 onloadend 外直接访问 result,必然是 undefined。
典型错误:
fileReader.readAsText(file, "utf-8"); console.log(fileReader.result); // ❌ 此刻 result 还没赋值
正确做法是把业务逻辑全塞进 onloadend 里,或用 Promise 包一层:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
return new Promise((resolve, reject) => {
const reader = new plus.io.FileReader();
reader.onloadend = () => resolve(JSON.parse(reader.result));
reader.onerror = () => reject(reader.error);
reader.readAsText(file, "utf-8");
});
权限和路径配置缺一不可,否则 requestFileSystem 直接 fail
没配权限时,plus.io.requestFileSystem 报错信息通常是 Permission denied 或 Operation not permitted,但不会告诉你具体缺哪项。必须逐项核对:
- Android:manifest.json → 模块权限配置 → 勾选
READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE;Android 10+ 还需在android/app/build.gradle的defaultConfig加android:requestLegacyExternalStorage="true" - iOS:manifest.json → iOS 模块配置 →
NSPhotoLibraryUsageDescription必须填非空字符串(哪怕你只读Documents/,iOS 也卡在这) - 路径必须用常量:
plus.io.PRIVATE_DOC,别写成'/documents/'或拼'file://'前缀
真机调试容易忽略的点:权限可能被系统关闭
用户可在手机设置里随时关闭存储权限,所以不能只在首次安装时检查一次。每次触发读配置前,建议加一层动态检测:
if (plus.os.name === 'Android') {
const has = plus.android.hasPermission('android.permission.WRITE_EXTERNAL_STORAGE');
if (!has) { /* 引导用户去设置页开启 */ }
}
另外,HBuilderX 的「运行到手机」和正式打包行为一致,但模拟器可能掩盖权限问题——务必用真机验证。
最常被跳过的其实是路径常量和事件监听的绑定时机:漏掉 onloadend 或误用 onload,结果就是文件明明存在,内容却始终读不出来。










