Dart readAsStringSync返回空值及readAsString使用问题求助
解决Flutter中文件读取的两个问题
结合你的运行环境(Dart VM 1.24.3,Flutter 0.2.8 beta通道),我来逐个拆解你的问题:
问题1:同步读取文件返回空字符串
执行var appl = new File('a.txt').readAsStringSync(); print(appl);得到空字符串,最可能的原因是文件路径不匹配——你默认以为程序在读取项目根目录的a.txt,但Dart/Flutter运行时的当前工作目录往往和你预期的位置不一样。
你可以先打印文件的绝对路径来验证:
print(File('a.txt').absolute.path);
运行后查看输出的路径,检查该路径下是否真的存在a.txt,以及文件内容是否非空。
另外,如果a.txt是你添加到Flutter项目的assets资源,直接用File类读取是无效的,因为assets会被打包进应用,需要通过rootBundle加载:
import 'package:flutter/services.dart' show rootBundle; Future<String> loadAssetFile() async { return await rootBundle.loadString('assets/a.txt'); }
记得要先在pubspec.yaml中正确声明assets路径。
问题2:正确使用返回Future<String>的readAsString方法
readAsString是异步方法,不会立即返回结果,推荐两种处理方式:
方式1:用async/await(代码更易读)
在标记了async的函数中,用await等待Future执行完成:
void readFileAsync() async { try { String content = await File('a.txt').readAsString(); print(content); } catch (e) { // 处理读取错误,比如文件不存在、无权限等 print('读取失败: $e'); } }
方式2:用then链式调用
通过then注册回调,当Future完成时触发逻辑:
File('a.txt').readAsString().then((content) { print(content); }).catchError((error) { print('读取失败: $error'); });
不管用哪种方式,都建议加上错误捕获,避免因文件不存在、权限不足等问题导致程序崩溃。
内容的提问来源于stack exchange,提问作者Sahil Yadav
相关产品推荐
相关产品推荐

