加载配置提示这个,07:16:52.133/E: Wrapped com.stardust.pio.UncheckedIOException: java.io.FileNotFoundException: /storage/emulated/0/Hamibot/./config/hamibot/single/config_hamibot_dy_sc_download.js: open failed: ENOENT (No such file or directory) (6a27471ecf45649feab57d36.js#224)
Wrapped com.stardust.pio.UncheckedIOException: java.io.FileNotFoundException: /storage/emulated/0/Hamibot/./config/hamibot/single/config_hamibot_dy_sc_download.js: open failed: ENOENT (No such file or directory)
at downloadScript (6a27471ecf45649feab57d36.js:224:0)
at autoImportMoudles (6a27471ecf45649feab57d36.js:110:0)
at run (6a27471ecf45649feab57d36.js:59:0)
at 6a27471ecf45649feab57d36.js:44:0
回答
这个错误是典型的 FileNotFoundException(文件未找到)。脚本尝试访问路径 /storage/emulated/0/Hamibot/./config/hamibot/single/config_hamibot_dy_sc_download.js 时失败,核心原因是目标文件或其父目录在设备上不存在,或路径解析异常。
结合 Hamibot 的运行机制与你的堆栈信息(报错发生在 downloadScript 第 224 行),你可以按以下步骤快速定位并修复:
1. 修复路径拼接与目录创建(最常见原因)
Hamibot 不会自动创建不存在的多级目录。路径中的 ./ 在部分 Android 文件系统下也可能导致解析失败。请在读写或下载保存前,强制确保目录存在,并使用 files.join() 规范化路径。
在你的脚本中(约 224 行附近)替换原有路径逻辑:
// 文档地址 https://docs.hamibot.com/
var configDir = files.join(files.cwd(), 'config', 'hamibot', 'single');
var configPath = files.join(configDir, 'config_hamibot_dy_sc_download.js');
// 确保父目录存在
if (!files.exists(configDir)) {
files.ensureDir(configPath);
}
// 后续下载写入或读取操作,统一使用 configPath 变量
2. 检查下载与读取的执行顺序
堆栈显示错误发生在 downloadScript 函数中。如果该配置文件是需要从网络下载的,请确认:
- 是否在下载请求完成且成功写入磁盘前,就提前执行了
require()或files.read()。 - 下载逻辑必须严格判断状态码,写入完成后再进行后续操作。参考标准写法:
// 文档地址 https://docs.hamibot.com/
var response = http.get(url, { headers: { 'User-Agent': 'Hamibot' } });
if (response.statusCode === 200) {
var bytes = response.body.bytes();
files.writeBytes(configPath, bytes);
console.log('配置文件下载并保存成功');
} else {
console.error('下载失败,状态码:' + response.statusCode);
// 此处应中断流程或降级处理,不要继续读取 configPath
}
3. 验证存储权限
Hamibot 读写 /storage/emulated/0/Hamibot/ 需要完整的存储权限。
- 进入手机系统设置 → 应用管理 → Hamibot → 权限,确保已授予**“文件和媒体”或“存储”**权限(Android 11+ 需开启“所有文件访问权限”)。
- 在 Hamibot 客户端新建一个临时脚本测试权限:
// 文档地址 https://docs.hamibot.com/
var testPath = files.join(files.cwd(), 'perm_test.txt');
files.write(testPath, 'ok');
toastLog(files.exists(testPath) ? '存储权限正常' : '存储权限异常');
4. 调试建议
- 在
downloadScript函数开头添加console.log('目标路径:', configPath);和console.log('目录是否存在:', files.exists(configDir));,观察运行时的真实路径状态。 - 避免在脚本中硬编码绝对路径,始终使用
files.cwd()或files.join()动态拼接,可大幅提升不同机型上的兼容性。
按上述步骤调整后,该报错即可消除。如果修改后仍触发异常,可以提供 downloadScript 函数第 215~230 行的具体代码,我会帮你精准定位逻辑断点。