Nodejs-文件流
2024-10-04 16:29:55
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)+'%');//可以查看进度
});
});
}
});
最新文章
- Codeforces Round #376A (div2)
- Java设计模式之结构型模式
- ul、li分列显示
- poj1753 Flip Game
- ASP.NET MVC3的学习
- ReSharper 文件注释
- IDTHook 深入学习
- 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
- matlab 中保存某几个变量
- iis认证方式
- 如何给report自定义page number
- open函数
- Java 螺纹第三版 第三章数据同步 读书笔记
- vector查找元素
- 设计模式二:MVC
- CJOJ 2040 【一本通】分组背包(动态规划)
- win10 uwp 右击选择 GridViewItem
- JQuery 绑定单击事件到某个函数的的方法
- poj2259 Team Queue
- 处理:“ORA-28002: the password will expire within 7 days”的问题