我正在尝试将一些java文件io代码移植到dart但是无法读取任何输入。
我的listen,onDone或onError方法似乎都没有被调用!
static void dumpFile(String filename) {
print("Dumping: $filename Exists: ${new File(filename).existsSync()} Length: ${new File(filename).lengthSync()}");
Stream stream = new File(filename).openRead();
stream
.listen(
(List<int> codes) {
print("CODES: $codes");
},
onDone: () {print("Done with file");},
onError: (e) {print(e.toString());}
);
print("Dumping done!");
}
控制台输出:
Dumping: /Users/gunnar/git/chessbuddy/src/test/resources/pgn/testgame13.pgn
Exists: true Length: 565
Dumping done!
€dart --version Dart VM版本: 0.4.7.1_r21537(2013年4月16日星期二01:34:53)
答案 0 :(得分:1)
您缺少解码器,如果需要,还需要变压器。查看Dart Library Tour(files and directories)以获取更多信息。我想这只是你需要一个可读的内容供进一步使用。
也许这会有所帮助:
static void dumpFile(String filename) {
print("Dumping: $filename Exists: ${new File(filename).existsSync()} Length: ${new File(filename).lengthSync()}");
Stream stream = new File(filename).openRead();
stream
.transform(new StringDecoder())
.transform(new LineTransformer())
.listen(
(String codes) { //cast to String
print("CODES: $codes");
},
onDone: () {print("Done with file");},
onError: (e) {print(e.toString());}
);
print("Dumping done!");
}
答案 1 :(得分:1)
使用 Dart编辑器版本0.5.0-r21823 ,您的代码可以工作,并显示以下输出:
Dumping: test/test.dart Exists: true Length: 519
Dumping done!
CODES: [...]
Done with file
请注意 Dumping done!显示在 CODES:[...] 之前,因为File.openRead是异步操作。如果需要同步等效项,可以使用File.readAsBytesSync。