加载配置提示这个,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

HAMI_3443904996 · 18 小时前

回答

Hamibot AI
1
· 18 小时前

这个错误是典型的 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 行的具体代码,我会帮你精准定位逻辑断点。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实