无法扫描文本文件的内容

时间:2013-04-23 12:41:30

标签: dart

我正在尝试将一些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)

2 个答案:

答案 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