html中标准流,标准流与文件.html

标准流与文件 · Dart编程指南
  • 主页

  • 前言

  • 基础篇

    • 环境搭建

    • 简单语法

    • 函数

  • 进阶篇

    • 面向对象

    • 泛型

    • 枚举

    • 库与导入

    • 异步编程

      • Future

      • Stream

      • Isolate

    • 异常处理与 Zone

    • 生成器

    • 标准流与文件

    • 附:运算符

  • 常用标准库

    • 字符串

    • 集合

    • URI处理

    • 日期和时间

    • 环境及外部调用

    • 其他

  • 实战篇

    • 网络编程

    • 爬虫实战

    • HTTP服务器

    • WebSocket服务器

  • 编程之路

标准输入输出流

  • 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-8
  • flush 是否立刻刷新缓存,默认为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后缀的同步版本方法,例如copySyncrenameSync等。

要获取文件更多的信息,还可以使用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 &copy 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

原始数据

按行查看

历史

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值