Класс File
Ссылка на файл в файловой системе.
Объект File содержит путь, над которым можно выполнять операции. Вы можете получить родительский каталог файла, используя свойство parent, унаследованное от FileSystemEntity.
Создайте новый объект File с полным именем пути, чтобы получить доступ к указанному файлу в файловой системе из вашей программы.
var myFile = File('file.txt'); Класс File содержит методы для управления файлами и их содержимым. С помощью методов этого класса вы можете открывать и закрывать файлы, читать и записывать в них, создавать и удалять их, а также проверять их существование.
При чтении или записи файла вы можете использовать потоки (с помощью openRead), операции с произвольным доступом (с помощью open) или удобные методы, такие как readAsString.
Большинство методов в этом классе имеют синхронные и асинхронные пары, например, readAsString и readAsStringSync. Если у вас нет конкретной причины использовать синхронную версию метода, отдавайте предпочтение асинхронной версии, чтобы избежать блокировки вашей программы.
Если путь является ссылкой
Если путь является символической ссылкой, а не файлом, то методы File работают с конечной целью ссылки, за исключением методов delete и deleteSync, которые работают с самой ссылкой.
Чтение из файла
Следующий пример кода читает все содержимое файла в виде строки с помощью асинхронного метода readAsString:
import 'dart:async';
import 'dart:io';
void main() {
File('file.txt').readAsString().then((String contents) {
print(contents);
});
} Более гибкий и полезный способ чтения файла — с помощью потока. Откройте файл с помощью 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.
} Вы также можете записать в файл, используя поток. Откройте файл с помощью openWrite, который возвращает IOSink, в который вы можете записать данные. Убедитесь, что вы закрываете поток с помощью метода 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. Дождитесь, пока будущее получит результат, когда он будет готов.
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 только для чтения, переопределено
- File с абсолютным путем пути.
- hashCode → int только для чтения, унаследовано
- Код хэша для этого объекта.
- isAbsolute → bool только для чтения, унаследовано
- Является ли путь этого объекта абсолютным.
- parent → Directory только для чтения, унаследовано
- Родительский каталог этого элемента.
- path → String только для чтения, переопределено
- Получить путь к файлу.
- runtimeType → Type только для чтения, унаследовано
- Представление типа объекта во время выполнения.
- uri → Uri только для чтения, унаследовано
- Uri, представляющий расположение сущности файловой системы.
Методы
- copy(
String newPath) → Future< File> - Копирует этот файл.
- copySync(
String newPath) → File - Синхронно копирует этот файл.
- create(
{bool recursive = false}) → Future< File> - Создаёт файл.
- createSync(
{bool recursive = 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.18.5/dart-io/File-class.html