1.什么是流?

流是程序输入输出的一个连续的字节序列。

有文件流,网络流,设备(例如鼠标,键盘,磁盘,调制解调器和打印机)的输入输出都是用流来处理的。

任何数据的最根本表现形式都是二进制。

读取文件

用异步方式读取

fs.readFile(filename,callback);

异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。

写入文件

语法

以下为异步模式下写入文件的语法格式:

fs.writeFile(filename, data[, options], callback)

如果文件存在,该方法写入的内容会覆盖旧的文件内容。

参数

参数使用说明如下:

  • path - 文件路径。

  • data - 要写入文件的数据,可以是 String(字符串) 或 Buffer(流) 对象。

  • options - 该参数是一个对象,包含 {encoding, mode, flag}。默认编码为 utf8, 模式为 0666 , flag 为 'w'

  • callback - 回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。

//文件复制
const fs=require('fs');
const path=require('path'); console.time('read');
fs.readFile('D:\\nodejs\\01.txt',(error,data)=>{
if(error){
throw error
}
console.timeEnd('read');
console.time('write');
//读取文件拿到
fs.writeFile('D:\\nodejs\\02.txt',data,error=>{
if(error){
throw error
}
console.timeEnd('write');
console.log('拷贝完成');
}); });

  

  

但是如果大文件的拷贝的话,内存就受不了

而且没有进度的概念,比如说,你拷贝一个很大的文件,一直在拷贝,你不知道已经拷贝到哪了,已经等不及了,就把它给停掉了,这样就造成之前的拷贝白白浪费了。

因此采取文件流的方式复制,就是针对大文件操作的

2.文件流操作方式

获取文件信息

通过异步模式获取文件信息的语法格式:

fs.stat(path, callback)

参数

参数使用说明如下:

  • path - 文件路径。

  • callback - 回调函数,带有两个参数如:(err, stats), stats 是 fs.Stats 对象。

fs.stat(path)执行后,会将stats类的实例返回给其回调函数。可以通过stats类中的提供方法判断文件的相关属性。

//文件流的方式复制
const fs=require('fs');
const path=require('path'); //创建文件的读取流,并没有读出正式的数据,开始了读取文件的任务
var reader=fs.createReadStream('D:\\nodejs\\03.txt');
//创建一个写入流
var writer=fs.createWriteStream('D:\\nodejs\\04.txt');
fs.stat('D:\\nodejs\\01.txt',(err,stats)=>{
if(stats){//如果有stats,就说明文件存在
var readTotal=0;
reader.on('data',(chunk)=>{
//chunk是一个buffer(字节数组),每次读取的只是一小部分数据
writer.write(chunk,(err)=>{
console.log('写的进度:'+((readTotal+=chunk.length)/stats.size*100)+'%');//可以查看进度
});
});
}
});

  

最新文章

  1. Codeforces Round #376A (div2)
  2. Java设计模式之结构型模式
  3. ul、li分列显示
  4. poj1753 Flip Game
  5. ASP.NET MVC3的学习
  6. ReSharper 文件注释
  7. IDTHook 深入学习
  8. http://blogs.msdn.com/b/pranavwagh/archive/2007/03/03/word-2007-file-seems-to-be-deleted-when-you-open-and-save-it-using-dsoframer.aspx
  9. matlab 中保存某几个变量
  10. iis认证方式
  11. 如何给report自定义page number
  12. open函数
  13. Java 螺纹第三版 第三章数据同步 读书笔记
  14. vector查找元素
  15. 设计模式二:MVC
  16. CJOJ 2040 【一本通】分组背包(动态规划)
  17. win10 uwp 右击选择 GridViewItem
  18. JQuery 绑定单击事件到某个函数的的方法
  19. poj2259 Team Queue
  20. 处理:“ORA-28002: the password will expire within 7 days”的问题

热门文章

  1. 配置ftp服务器
  2. Java框架:spring框架整合hibernate框架的xml配置(使用注解的方式)
  3. <Android 应用 之路> 天气预报(五)
  4. Eucalyptus-利用镜像启动一个Windows Server 2008r2实例
  5. C#Udp组播
  6. JavaScript:理解Promise方法
  7. 【转载】LCT题单
  8. mac 下删除非空文件夹
  9. CentOS启动时自动加载内核模块
  10. Bootstrap 弹出框(Popover)插件