Класс File
Ссылка на файл в файловой системе.
Объект File хранит путь, по которому можно выполнять операции. Получить родительский каталог файла можно с помощью свойства parent, унаследованного от FileSystemEntity.
Создайте новый объект File, указав путь, чтобы получить доступ из программы к заданному файлу в файловой системе.
var myFile = File('file.txt'); Класс File содержит методы для работы с файлами и их содержимым. С помощью методов этого класса можно открывать и закрывать файлы, читать из них и записывать в них данные, создавать и удалять их, а также проверять их наличие.
Для чтения и записи файла можно использовать потоки (с помощью openRead), операции произвольного доступа (с помощью open) или удобные методы, например readAsString,
Большинство методов этого класса доступны в синхронной и асинхронной версиях, например readAsString и readAsStringSync. Если у вас нет особой причины использовать синхронную версию метода, отдавайте предпочтение асинхронной, чтобы избежать блокировки программы.
Если путь является ссылкой
Если path — символическая ссылка, а не файл, методы File работают с конечной целью ссылки, за исключением delete и deleteSync, которые работают со ссылкой.
Чтение из файла
В следующем примере кода всё содержимое файла считывается в виде строки с помощью асинхронного метода readAsString:
import 'dart:async';
import 'dart:io';
void main() {
File('file.txt').readAsString().then((String contents) {
print(contents);
});
} Более гибкий и удобный способ чтения файла — использовать Stream. Откройте файл с помощью openRead. Этот метод возвращает поток, предоставляющий данные файла порциями байтов. Читайте поток, чтобы обрабатывать содержимое файла по мере его поступления. Можно последовательно применять различные преобразователи, чтобы привести содержимое файла к нужному формату или подготовить его к выводу.
Поток может быть полезен при чтении больших файлов, преобразовании данных с помощью преобразователей или для совместимости с другим API, например с WebSocket.
import 'dart:io';
import 'dart:convert';
import 'dart:async';
void main() async {
final file = File('file.txt');
Stream<String> lines = file.openRead()
.transform(utf8.decoder) // Decode bytes to UTF-8.
.transform(LineSplitter()); // Convert stream to individual lines.
try {
await for (var line in lines) {
print('$line: ${line.length} characters');
}
print('File is now closed.');
} catch (e) {
print('Error: $e');
}
} Запись в файл
Чтобы записать строку в файл, используйте метод writeAsString:
import 'dart:io';
void main() async {
final filename = 'file.txt';
var file = await File(filename).writeAsString('some content');
// Do something with the file.
} Записывать данные в файл можно также с помощью Stream. Откройте файл с помощью openWrite. Метод возвращает IOSink, в который можно записывать данные. Не забудьте закрыть sink с помощью метода IOSink.close.
import 'dart:io';
void main() {
var file = File('file.txt');
var sink = file.openWrite();
sink.write('FILE ACCESSED ${DateTime.now()}\n');
// Close the IOSink to free system resources.
sink.close();
} Использование асинхронных методов
Чтобы избежать непреднамеренной блокировки программы, несколько методов являются асинхронными и возвращают Future. Например, метод length, возвращающий длину файла, возвращает Future. Дождитесь завершения future, чтобы получить результат, когда он будет готов.
import 'dart:io';
void main() async {
final file = File('file.txt');
var length = await file.length();
print(length);
} Помимо length, асинхронными являются методы exists, lastModified, stat и другие.
Другие ресурсы
-
Раздел Файлы и каталоги в обзоре библиотек.
-
В руководстве Создание приложений командной строки приведена информация о файлах и каталогах.
- Реализуемые типы
Конструкторы
- File(String path) factory
- Создаёт объект File.
- File.fromRawPath(Uint8List rawPath) factory
- Создаёт объект File из необработанного пути.
- File.fromUri(Uri uri) factory
- Создаёт объект File из URI.
Свойства
- absolute → File read-onlyoverride
- Объект File с абсолютным путём path.
- hashCode → int read-onlyinherited
- Хеш-код этого объекта.
- isAbsolute → bool read-onlyinherited
- Является ли путь этого объекта абсолютным.
- parent → Directory read-onlyinherited
- Родительский каталог этой сущности.
- path → String read-onlyoverride
- Возвращает путь к файлу.
- runtimeType → Type read-onlyinherited
- Представление типа объекта во время выполнения.
- uri → Uri read-onlyinherited
- Объект Uri, представляющий расположение сущности файловой системы.
Методы
- copy(
String newPath) → Future< File> - Копирует этот файл.
- copySync(
String newPath) → File - Синхронно копирует этот файл.
- create(
{bool recursive = false, bool exclusive = false}) → Future< File> - Создаёт файл.
- createSync(
{bool recursive = false, bool exclusive = false}) → void - Синхронно создаёт файл.
- delete(
{bool recursive = false}) → Future< FileSystemEntity> inherited - Удаляет эту
FileSystemEntity. - deleteSync(
{bool recursive = false}) → void inherited - Синхронно удаляет эту FileSystemEntity.
- exists(
) → Future< bool> inherited - Проверяет, существует ли сущность файловой системы по этому пути.
- existsSync(
) → bool inherited - Синхронно проверяет, существует ли сущность файловой системы по этому пути.
- lastAccessed(
) → Future< DateTime> - Время последнего доступа к файлу.
- lastAccessedSync(
) → DateTime - Время последнего доступа к файлу.
- lastModified(
) → Future< DateTime> - Возвращает время последнего изменения файла.
- lastModifiedSync(
) → DateTime - Возвращает время последнего изменения файла.
- length(
) → Future< int> - Длина файла.
- lengthSync(
) → int - Синхронно возвращает длину файла.
- noSuchMethod(
Invocation invocation) → dynamic inherited - Вызывается при обращении к несуществующему методу или свойству.
- open(
{FileMode mode = FileMode.read}) → Future< RandomAccessFile> - Открывает файл для операций произвольного доступа.
- openRead(
[int? start, int? end]) → Stream< List< int>> - Создаёт новый независимый Stream для содержимого этого файла.
- openSync(
{FileMode mode = FileMode.read}) → RandomAccessFile - Синхронно открывает файл для операций произвольного доступа.
- openWrite(
{FileMode mode = FileMode.write, Encoding encoding = utf8}) → IOSink - Создаёт новый независимый IOSink для файла.
- readAsBytes(
) → Future< Uint8List> - Считывает всё содержимое файла в виде списка байтов.
- readAsBytesSync(
) → Uint8List - Синхронно считывает всё содержимое файла в виде списка байтов.
- readAsLines(
{Encoding encoding = utf8}) → Future< List< String>> - Считывает всё содержимое файла в виде строк текста, используя заданную Encoding.
- readAsLinesSync(
{Encoding encoding = utf8}) → List< String> - Синхронно считывает всё содержимое файла в виде строк текста, используя заданную Encoding.
- readAsString(
{Encoding encoding = utf8}) → Future< String> - Считывает всё содержимое файла в виде строки, используя заданную Encoding.
- readAsStringSync(
{Encoding encoding = utf8}) → String - Синхронно считывает всё содержимое файла в виде строки, используя заданную Encoding.
- rename(
String newPath) → Future< File> override - Переименовывает этот файл.
- renameSync(
String newPath) → File override - Синхронно переименовывает этот файл.
- resolveSymbolicLinks(
) → Future< String> inherited - Определяет путь объекта файловой системы относительно текущего рабочего каталога.
- resolveSymbolicLinksSync(
) → String inherited - Синхронно определяет путь объекта файловой системы относительно текущего рабочего каталога.
- setLastAccessed(
DateTime time) → Future - Изменяет время последнего доступа к файлу.
- setLastAccessedSync(
DateTime time) → void - Синхронно изменяет время последнего доступа к файлу.
- setLastModified(
DateTime time) → Future - Изменяет время последнего изменения файла.
- setLastModifiedSync(
DateTime time) → void - Синхронно изменяет время последнего изменения файла.
- stat(
) → Future< FileStat> inherited - Вызывает функцию
stat()операционной системы для path. - statSync(
) → FileStat inherited - Синхронно вызывает функцию
stat()операционной системы для path. - toString(
) → String inherited - Строковое представление этого объекта.
- watch(
{int events = FileSystemEvent.all, bool recursive = false}) → Stream< FileSystemEvent> inherited - Начинает отслеживать изменения FileSystemEntity.
- writeAsBytes(
List< int> bytes, {FileMode mode = FileMode.write, bool flush = false}) → Future< File> - Записывает список байтов в файл.
- writeAsBytesSync(
List< int> bytes, {FileMode mode = FileMode.write, bool flush = false}) → void - Синхронно записывает список байтов в файл.
- writeAsString(
String contents, {FileMode mode = FileMode.write, Encoding encoding = utf8, bool flush = false}) → Future< File> - Записывает строку в файл.
- writeAsStringSync(
String contents, {FileMode mode = FileMode.write, Encoding encoding = utf8, bool flush = false}) → void - Синхронно записывает строку в файл.
Операторы
- operator ==(
Object other) → bool inherited - Оператор равенства.
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-io/File-class.html