2013-04-23 1 views
1

Я пытаюсь перенести некоторый код java-файла io в dart, но не может получить какой-либо ввод для чтения.Не удалось сканировать содержимое текстового файла

Ни один из моих методов прослушивания, 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! 

€ дротик --version Dart VM версия: 0.4.7.1_r21537 (Вт Апр 16 01:34:53 2013)

+0

На самом деле произошло то, что программа остановлена ​​из-за ошибок, которые произошли в основном потоке. Виноват! –

ответ

1

Вы отсутствует декодер и, при необходимости, трансформатор. Просмотрите Tour 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

С Dart Editor версии 0.5.0-r21823 вашего кода работает и отображается следующий вывод:

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

Обратите внимание, что Демпинг сделано ! отображается до КОДЫ: [...], потому что File.openRead - это асинхронная операция. Вы можете использовать File.readAsBytesSync, если хотите синхронный эквивалент.

Смежные вопросы