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

Flutter删除不存在文件时try catch未捕获FileSystemException是否正常?

问题结论

该情况属于正常现象,和Dart的异步异常捕获机制有关。

原因说明

Dart中File类的delete()是异步方法,返回Future<void>类型对象。你当前代码没有对delete()的返回值加await,try-catch只能捕获同步执行栈内的异常,异步任务抛出的异常无法被当前同步try-catch捕获,最终就会触发未处理异常报错。

修复方案

有两种常用的修复方式:

  1. 搭配async/await使用try-catch
// 注意包含这段代码的函数需要标记为async
try {
  await jsonFile.delete();
  fileExists = false;
  print("File deleted");
} catch(e) {
  print("File does not exists!");
}
  1. 直接为Future注册catchError回调
jsonFile.delete().then((_) {
  fileExists = false;
  print("File deleted");
}).catchError((e) {
  print("File does not exists!");
});

可选优化

如果不想通过捕获异常处理文件不存在的场景,可以先判断文件是否存在再执行删除:

if (await jsonFile.exists()) {
  await jsonFile.delete();
  fileExists = false;
  print("File deleted");
} else {
  print("File does not exists!");
}

内容的提问来源于stack exchange,提问作者Toska 003

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:57:00