本文共 2738 字,大约阅读时间需要 9 分钟。
Stream流之fs模块操作实例一
一、读取文件
实例1:指定每次读取数据量大小
//实例1,读取文件var fs=require('fs');var path=require('path');var file=path.resolve('/test1/one.txt');//指定每次读取数量var readable=fs.createReadStream(file,{ highWaterMark:5 //指定每次读取5字节,总共12字节,所以会读取3次});//监听是否可读取var count=0;readable.on('readable',function(){ console.info(file+'---可以读取'); //F:\test1\one.txt---可以读取})//监听每次读取到数据readable.on('data',function(chunk){ console.log(Buffer.isBuffer(chunk)); //true count+=chunk.length; console.info(chunk.toString('utf-8'));});//读取结束readable.on('end',function(chunk){ console.log('读取结束,总共字节数:'+count); //读取结束,总共字节数:12});实例2:读取暂停然后继续
//文件读取的暂停和继续var fs=require('fs');var path=require('path');var file=path.resolve('/test1/one.txt');var readable=fs.createReadStream(file,{ highWaterMark:6, start:0});//读取一段成功readable.on('data',function(chunk){ console.log(chunk.toString()); //1: 123456 //2: 789012 //读取中止 readable.pause(); setTimeout(function(){ //继续读取 readable.resume(); },2000);});//读取结束readable.on('end',function(){ console.log('读取操作结束');});//读取关闭readable.on('close',function(){ console.log('读取操作关闭');});实例3:读取文件部分内容,指定文件开始位置和结束位置读取
var fs=require('fs');var path=require('path');var file=path.resolve('/test1/one.txt');//指定开始位置,结束位置读取文件var readable=fs.createReadStream(file,{ highWaterMark:6, start:6, end:12});readable.on('open',function(fd){ console.log('打开文件成功,句柄:'+fd); // 打开文件成功,句柄:3});readable.on('data',function(chunk){ console.info(chunk.toString('ascii')); //789012});readable.on('end',function(){ console.log('读取结束'); //读取结束});readable.on('close',()=>{ console.log('读取关闭'); //读取关闭});readable.on('error',function(err){ console.log('读取异常,'+err); //当出现异常时触发});
二、写入文件
实例1:指定编码写入文件
var fs=require('fs');var path=require('path');var file=path.resolve('/test1/write.txt');var writeable=fs.createWriteStream(file,{ highWaterMark:6, defaultEncoding:'utf8', //设置写入时默认的编码 flags:'w' //如果不存在则创建});//当前写入完成时触发//调用end()方法时触发writeable.on('finish',function(){ console.log('写入完成'); process.exit(0); //程序退出});//当前出现异常时触发writeable.on('error',function(err){ console.log('写入异常,'+err);});writeable.write('中文abcdefghijk');//writeable.write('中文字符','ascii'); //显示指定写入编码,如果文件中有内容,同时也转码成ascii//标记结束writeable.end();实例2:追加方式写入文件
//写入流实例var fs=require('fs');var path=require('path');var file=path.resolve('/test1/write.txt');//指定写入位置,创建写入流var writeable=fs.createWriteStream(file,{ //flags:'a+', //追加模式开开文件 ,指定start则无效 flags:'w', start:5 //指定开始位置,会使当前位置之前的内容默认成空格});//设置默认编码writeable.setDefaultEncoding('utf8');var buf=new Buffer('微工具集:www.gongjuji.net');writeable.write(buf);//标记文件结尾writeable.end();// 写入文件结束时触发writeable.on('finish',function(){ console.log('写入文件成功'); // 写入文件成功});writeable.on('error',function(err){ console.log('写入文件出错:'+err);});console.log('代码执行结束');
转载地址:http://wfogi.baihongyu.com/