Flutter删除不存在文件时try catch未捕获FileSystemException是否正常?
问题结论
该情况属于正常现象,和Dart的异步异常捕获机制有关。
原因说明
Dart中File类的delete()是异步方法,返回Future<void>类型对象。你当前代码没有对delete()的返回值加await,try-catch只能捕获同步执行栈内的异常,异步任务抛出的异常无法被当前同步try-catch捕获,最终就会触发未处理异常报错。
修复方案
有两种常用的修复方式:
- 搭配
async/await使用try-catch
// 注意包含这段代码的函数需要标记为async try { await jsonFile.delete(); fileExists = false; print("File deleted"); } catch(e) { print("File does not exists!"); }
- 直接为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
相关产品推荐
相关产品推荐

