| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of dart.io; | 5 part of dart.io; |
| 6 | 6 |
| 7 // Read the file in blocks of size 64k. | 7 // Read the file in blocks of size 64k. |
| 8 const int _BLOCK_SIZE = 64 * 1024; | 8 const int _BLOCK_SIZE = 64 * 1024; |
| 9 | 9 |
| 10 | 10 |
| (...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 487 return encoding.decode(bytes); | 487 return encoding.decode(bytes); |
| 488 } catch (_) { | 488 } catch (_) { |
| 489 throw new FileSystemException( | 489 throw new FileSystemException( |
| 490 "Failed to decode data using encoding '${encoding.name}'", path); | 490 "Failed to decode data using encoding '${encoding.name}'", path); |
| 491 } | 491 } |
| 492 } | 492 } |
| 493 | 493 |
| 494 Future<String> readAsString({Encoding encoding: UTF8}) => | 494 Future<String> readAsString({Encoding encoding: UTF8}) => |
| 495 readAsBytes().then((bytes) => _tryDecode(bytes, encoding)); | 495 readAsBytes().then((bytes) => _tryDecode(bytes, encoding)); |
| 496 | 496 |
| 497 String readAsStringSync({Encoding encoding: UTF8}) { | 497 String readAsStringSync({Encoding encoding: UTF8}) => |
| 498 List<int> bytes = readAsBytesSync(); | 498 _tryDecode(readAsBytesSync(), encoding); |
| 499 return _tryDecode(bytes, encoding); | |
| 500 } | |
| 501 | 499 |
| 502 List<String> _decodeLines(List<int> bytes, Encoding encoding) { | 500 Future<List<String>> readAsLines({Encoding encoding: UTF8}) => |
| 503 if (bytes.length == 0) return []; | 501 readAsString(encoding: encoding).then(const LineSplitter().convert); |
| 504 var list = []; | |
| 505 var controller = new StreamController(sync: true); | |
| 506 var error = null; | |
| 507 controller.stream | |
| 508 .transform(encoding.decoder) | |
| 509 .transform(new LineSplitter()) | |
| 510 .listen((line) => list.add(line), onError: (e) => error = e); | |
| 511 controller.add(bytes); | |
| 512 controller.close(); | |
| 513 if (error != null) { | |
| 514 throw new FileSystemException( | |
| 515 "Failed to decode data using encoding '${encoding.name}'", path); | |
| 516 } | |
| 517 return list; | |
| 518 } | |
| 519 | |
| 520 Future<List<String>> readAsLines({Encoding encoding: UTF8}) { | |
| 521 return readAsBytes().then((bytes) { | |
| 522 return _decodeLines(bytes, encoding); | |
| 523 }); | |
| 524 } | |
| 525 | 502 |
| 526 List<String> readAsLinesSync({Encoding encoding: UTF8}) => | 503 List<String> readAsLinesSync({Encoding encoding: UTF8}) => |
| 527 _decodeLines(readAsBytesSync(), encoding); | 504 const LineSplitter().convert(readAsStringSync(encoding: encoding)); |
| 528 | 505 |
| 529 Future<File> writeAsBytes(List<int> bytes, | 506 Future<File> writeAsBytes(List<int> bytes, |
| 530 {FileMode mode: FileMode.WRITE, | 507 {FileMode mode: FileMode.WRITE, |
| 531 bool flush: false}) { | 508 bool flush: false}) { |
| 532 return open(mode: mode).then((file) { | 509 return open(mode: mode).then((file) { |
| 533 return file.writeFrom(bytes, 0, bytes.length) | 510 return file.writeFrom(bytes, 0, bytes.length) |
| 534 .then((_) { | 511 .then((_) { |
| 535 if (flush) return file.flush().then((_) => this); | 512 if (flush) return file.flush().then((_) => this); |
| 536 return this; | 513 return this; |
| 537 }) | 514 }) |
| (...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 922 void _checkAvailable() { | 899 void _checkAvailable() { |
| 923 if (_asyncDispatched) { | 900 if (_asyncDispatched) { |
| 924 throw new FileSystemException("An async operation is currently pending", | 901 throw new FileSystemException("An async operation is currently pending", |
| 925 path); | 902 path); |
| 926 } | 903 } |
| 927 if (closed) { | 904 if (closed) { |
| 928 throw new FileSystemException("File closed", path); | 905 throw new FileSystemException("File closed", path); |
| 929 } | 906 } |
| 930 } | 907 } |
| 931 } | 908 } |
| OLD | NEW |