Dart: начало работы с Deep Road Map:
Дартский язык - быстрое начало за 45 минут (часть 1)
Dart Language — быстрый старт за 45 минут (часть 2)
Полное понимание асинхронного программирования Dart
Подробное объяснение асинхронного потока языка Dart
Стандартные потоковые и файловые операции языка Dart
Дартс Сетевое Программирование
Опыт разработки краулеров Dart
Разработка сервера с полным стеком Dart
Dart FFI называет смешанное программирование на языке C
Взаимный звонок между Dart и Lua в LuaDardo
Следуй за мной, не пропусти!
стандартные входные и выходные потоки
stdin
stdout
stderr
// 导入io包
import 'dart:io';
void main() {
// 向标准输出流写字符串
stdout.write('root\$:');
// 从标准输入流读取一行字符串
var input = stdin.readLineSync();
// 带换行符的写数据
stdout.writeln("input data:$input");
// 向标准错误流写数据
stderr.writeln("has not error");
}
stdin
за исключением того, что вы можете использоватьreadLineSync
Чтобы прочитать строку строки, вы также можете использоватьreadByteSync
Прочитайте байт.
файловые операции
записать файл
Простой способ работы, нет необходимости закрывать файл вручную, он будет закрыт автоматически после записи файла
import 'dart:io';
void main() async{
// 创建文件
File file = new File('test.txt');
String content = 'The easiest way to write text to a file is to create a File';
try {
// 向文件写入字符串
await file.writeAsString(content);
print('Data written.');
} catch (e) {
print(e);
}
}
writeAsString
прототип
Future<File> writeAsString(String contents,
{FileMode mode: FileMode.write,
Encoding encoding: utf8,
bool flush: false})
mode
encoding
flush
FileMode
Константы
постоянное значение | иллюстрировать |
---|---|
read | режим только для чтения |
write | Режим чтения-записи, перезаписывает файл, если он существует |
append | Режим добавления, доступный для чтения и записи, добавление в конец, если файл существует |
writeOnly | режим только записи |
writeOnlyAppend | Режим добавления в режиме только для записи, не для чтения |
КромеwriteAsString
В дополнение к методу вы также можете использоватьwriteAsBytes
Напишите список байтов. Следует отметить, что эти два метода выполняются асинхронно, а возвращаемое значение равноFuture
При необходимости вы также можете использовать синхронный метод для выполнения операции записи.
writeAsStringSync
writeAsBytesSync
Если вам нужно более гибкое управление, вы можете использовать следующие методы для работы с файлом, но вам нужно закрыть файл вручную
import 'dart:io';
void main() async{
// 创建文件
File file = new File('test.txt');
// 文件模式设置为追加
IOSink isk = file.openWrite(mode: FileMode.append);
// 多次写入
isk.write('A woman is like a tea bag');
isk.writeln('you never know how strong it is until it\'s in hot water.');
isk.writeln('-Eleanor Roosevelt');
await isk.close();
print('Done!');
}
прочитать файл
Простой способ
readAsBytes
readAsBytesSync
readAsString
readAsStringSync
readAsLines
readAsLinesSync
void main() async{
File file = new File('test.txt');
try{
String content = await file.readAsString();
print(content);
}catch(e){
print(e);
}
}
Другой способ более низкого уровня
import 'dart:io';
import 'dart:convert';
void main() async{
try {
// LineSplitter Dart语言封装的换行符,此处将文本按行分割
Stream lines = new File('test.txt').openRead()
.transform(utf8.decoder).transform(const LineSplitter());
await for (var line in lines) {
print(line);
}
} catch (_) {}
}
Другие операции с файлами
import 'dart:io';
void main() async{
File file = new File('test.txt');
// 判断文件是否存在
if(await file.exists()){
print("文件存在");
}else{
print("文件不存在");
}
// 复制文件
await file.copy("test-1.txt");
// 修改文件名。当传入不同路径时,可用来移动文件
await file.rename("test-2.txt");
// 获取文件 size
print(await file.length());
}
Соответственно, эти методы также имеютSync
Суффикс синхронной версии метода, например,copySync
,renameSync
Ждать.
File
FileSystemEntity
Для работы
import 'dart:io';
void main() async{
String path = 'test.txt';
// 判断路径是否是文件夹
if (!await FileSystemEntity.isDirectory(path)) {
print('$path is not a directory');
}
Directory dir = Directory(r'D:\workspace\dart_space\Tutorial');
// 目录是否存在
if(await dir.exists()){
// 从目录的list方法获取FileSystemEntity对象
Stream<FileSystemEntity> fse = await dir.list();
await for (FileSystemEntity entity in fse) {
if(entity is File){
print("entity is file");
}
// 打印文件信息
print(await entity.stat());
// 删除
await entity.delete();
}
}else{
// 不存在则创建。recursive为true时,创建路径上所有不存在的目录
await dir.create(recursive: true);
}
}
Следует отметить,delete
содержит необязательный параметр, прототип Future<FileSystemEntity> delete({bool recursive: false})
,recursive
По умолчанию false, при удалении каталога каталог должен быть пустым для удаления; когдаrecursive
Если установлено значение true, все подкаталоги и файлы в каталоге будут удалены.
видео уроки
Похожие видеокурсы, размещенные блогерами
Руководство по программированию Dart для полной разработки Flutter
Руководство по разработке полного стека Flutter