Работа с файлами

Последнее обновление: 12.04.2023

Для работы с файлами библиотека dart:io определяет класс File, а для работы с папками - класс Directory

Для создания объекта класс File предоставляет фабричный конструктор, в который передается в качестве параметра путь к файлу:

File(String path)

Например, определим файл:

import 'dart:io';		// для работы  с File

void main () {
  File file = File("hello.txt");
	print(file.path);         // hello.txt
}

Для работы с файлами прежде всего необходимо подключить библиотеку "dart:io":

import 'dart:io';

В функции main определяем объект File, который будет использовать файл "hello.txt".

File file = File("hello.txt");

Поскольку передан относительный путь, то предполагается, что файл "hello.txt" будет располагаться в корневом каталоге текущего проекта (или папке текущего файла программы, если запускается не проект, а просто скрипт Dart). Причем не важно, что такого файла нет, далее мы его создадим.

Для получения информации о файле класс File предоставляет ряд свойств, из которых можно отметить свойство path, которое возвращает путь к файлу.

Для получения абсолютного пути к файлу применяется свойство absolute. Оно возвращает объект File с абсолютным путем:

import 'dart:io';

void main () {
  File file = File("hello.txt");
	print(file.path);           // hello.txt
  print(file.absolute.path);  // c:\dart\hello.txt
}

Создание файла

Для создания файла применяется метод create()

Future<File> create({bool recursive = false, bool exclusive = false});

Первый параметр метода определяет поведение при создании файла в подкаталогах. Если параметр recursive равен false, то файл создается, если только существуют все каталоги из пути к нему. Если параметр recursive равен true, то любой несуществующий каталог из пути к файлу создается автоматически.

Второй параметр определяет поведение, если файл уже существует. При значении false (по умолчанию), если файл по указанному пути существует, то ничего не происходит. Если же параметр равен true, и файл уже существует, то генерируется исключение FileSystemException.

Например, создадим в текущем каталоге файл "hello.txt":

import 'dart:io';

void main () async{
  File file = File("hello.txt");
  await file.create();
	print("File has been created");
}

Если нам надо создать файл во вложенном каталоге, который неизвестно существует или нет, то в метод лучше передать параметр recursive со значением true:

import 'dart:io';

void main async() {
  File file = File("somefolder/hello.txt");
  await file.create(recursive:true);
	print("File has been created");
}

Копирование файла

Для копирования файла применяется функция copy(), в которую передается путь, по которому будет располагаться скопированный файл:

Future<File> copy(String newPath);

Результатом функции является скопированный файл.

Например, скопируем файл "hello.txt" в "work.txt":

import 'dart:io';

void main () async{
  // сначала создаем файл "hello.txt"
  File file = await File("hello.txt").create();
  // затем копируем его в "work.txt"
  File fileCopy = await file.copy("work.txt");

	print("File ${file.path} has been copied to ${fileCopy.path}");
}

Проверка существования файла

Метод exists() возвращает true, если файл существует

Future<bool> exists()

Проверим существование ряда файлов:

import 'dart:io';

void main () async{

  print(await File("hello.txt").exists());
  print(await File("somefile.dat").exists());
}

Переименование

Для переименования файла применяется метод rename()

Future<FileSystemEntity> rename(String newPath);

В качестве параметра передается новый путь. А результатом метода является переименованный файл в виде нового объекта File. Например, переименуем файл "hello.txt" в "hello1235.txt":

import 'dart:io';

void main() async {
  // создаем файл "hello.txt"
  var file = await File("hello.txt").create();
  // переименовываем его в "hello12345.txt"
  var new_file = await file.rename("hello12345.txt");
  print("File ${file.path} renamed to ${new_file.path}");
}

Удаление

Для удаления файла применяется метод delete()

Future<FileSystemEntity> delete({bool recursive = false})

Результатом функции является удаленный файл. Стоит отметить, что если файл не существует, то генерируется исключение, поэтому перед удалением желательно проверять наличие файла. Например, удалим файл "work.txt":

import 'dart:io';

void main() async {
  var file = File("work.txt");
  // если файл существует
  if(await file.exists()){
    await file.delete();
    print("${file.path} deleted");
  }  
}

Получение статистики по файлу

Для получение данных папки применяется метод stat():

Future<FileStat> stat()

Статистика представляет класс FileStat, который предоставляет ряд свойств:

  • accessed: время последнего доступа (объект DateTime)

  • changed: время последнего изменения данных папки/файла или их метаданных (объект DateTime)

  • modified: время последнего изменения данных папки/файла (объект DateTime)

  • size: размер

  • mode: режим файла

Получение статистики:

import 'dart:io';

void main() async {
  final file = await File("hello.txt").create();
  final stat = await file.stat();
  print(file.path); 
  print("Accessed datetime: ${stat.accessed}");  
  print("Modified datetime: ${stat.modified}");  
  print("Size: ${stat.size}");  
}

Кроме того, класс File предоставляет ряд методов для получения аналогичных данных:

  • lastAccessed(): возвращает время последнего доступа к файлу в виде объекта DateTime

  • lastModified(): возвращает время последнего изменения файла в виде объекта DateTime

  • length(): возвращает размер файла в байтах

Применение методов:

import 'dart:io';

void main() async {
  final file = await File("hello.txt").create();

  print(file.path); 

  final lastAccessed = await file.lastAccessed();
  final lastModified = await file.lastModified();
  final length = await file.length();

  print("Accessed datetime: $lastAccessed");  
  print("Modified datetime: $lastModified");  
  print("Size: $length");  
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850