前言
基础篇
进阶篇
常用标准库
实战篇
编程之路
标准输入输出流
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
字符编码,默认为utf-8flush
是否立刻刷新缓存,默认为false
文件模式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时,将删除目录下的所有子目录及文件。
公众号“编程之路从0到1”
Copyright © Arcticfox 2020 all right reserved,powered by Gitbook
2021-03-18 13:32:58
console.log("plugin-popup....");document.onclick = function(e){ e.target.tagName === "IMG" && window.open(e.target.src,e.target.src)}
results matching ""
No results matching ""
var gitbook = gitbook || [];
gitbook.push(function() {
gitbook.page.hasChanged({"page":{"title":"标准流与文件","level":"1.3.8","depth":2,"next":{"title":"附:运算符","level":"1.3.9","depth":2,"path":"运算符.md","ref":"运算符.md","articles":[]},"previous":{"title":"生成器","level":"1.3.7","depth":2,"path":"生成器.md","ref":"生成器.md","articles":[]},"dir":"ltr"},"config":{"plugins":["anchor-navigation-ex","expandable-chapters-small","-lunr","-search","search-pro","-sharing","github","expandable-chapters","pageview-count","theme-comscore","tbfed-pagefooter","popup","custom-favicon"],"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"tbfed-pagefooter":{"copyright":"Copyright © Arcticfox 2020","modify_label":"文档修订于:","modify_format":"YYYY-MM-DD HH:mm:ss"},"github":{"url":"https://github.com/arcticfox1919"},"search-pro":{},"popup":{},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"anchor-navigation-ex":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":true},"favicon":"logo.ico","theme-comscore":{},"pageview-count":{},"custom-favicon":{},"expandable-chapters-small":{},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"expandable-chapters":{}},"theme":"default","author":"arcticfox","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Dart编程指南","language":"zh-hans","links":{"sidebar":{"主页":"http://www.bczl.xyz/"}},"gitbook":"*"},"file":{"path":"标准流与文件.md","mtime":"2021-03-18T05:32:58.025Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2021-03-18T06:38:01.932Z"},"basePath":".","book":{"language":""}});
});
一键复制
编辑
Web IDE
原始数据
按行查看
历史