1

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

4

2 回答 2

1

使用Dart Editor 版本 0.5.0-r21823,您的代码可以正常工作,并显示以下输出:

Dumping: test/test.dart Exists: true Length: 519
Dumping done!
CODES: [...]
Done with file

注意倾倒完成!显示在CODES: [...]之前,因为File.openRead是异步操作。如果需要同步等效项,可以使用File.readAsBytesSync 。

于 2013-04-23T13:37:43.777 回答
1

您缺少解码器,如果需要,还缺少变压器。查看 Dart 库之旅(文件和目录)了解更多信息。我想这只是在您需要可读内容以供进一步使用时。

也许这会有所帮助:

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!");
  }
于 2013-04-23T13:28:02.367 回答