node.js实现文件读取\写入\复制内容——李帅醒博客

版权声明:本文为博主 我吃酸萝卜/李帅醒 原创, 未经博主允许不得转载。新浪微博@我吃酸萝卜 https://blog.csdn.net/wcslb/article/details/53413289

Node.js读取文件内容包括同步和异步两种方式。

执行所有文件操作前一定要加载文件模块。

//加载文件模块
var fs=require("fs");
1.异步读取文件:

readFile(path[,encode],callback)异步读取文件
path:文件路径
encode:文件编码
callback:回调函数 返回 错误信息 、读取的内容

//异步读取文件()
fs.readFile("./data.txt","utf-8",function(err,data){
	if(!err){
		console.log(data.toString());
	}
});
2.同步读取文件:
//同步读取文件
 var data=fs.readFileSync("./data.txt","utf-8")
 console.log(data);
3.异步写入文件:

异步写文件(path,content,callback)异步写文件
path 要写入的文件
content 要写入的内容

/callback 回调函数
如果文件不存在,会先创建文件

//异步写入文件
	 fs.writeFile("./data.txt","每天被自己帅醒",function(err){
	 	console.log(err)
	 })
4.同步写入文件:

// fs.writeFileSync("./data.txt","每天被丑哭");

复制文件:

1.首先我们需要读取到文件,然后才能复制文件,切记同步异步,特别是异步,请在文件读取完后再执行写入的程序

// 复制文件
fs.readFile("./1.png",function(err,data){
	fs.writeFile("c://1.png",data,function(err){
		console.log(err);
	})
})

2.复制文件:nodejs中流(stream):上面这种复制读取小文件没有什么问题,但是读取大文件时有可能造成内存爆仓(这种方式不可取),

但是对于体积较大的二进制文件,比如音频、视频文件,动辄几个GB大小,如果使用这种方法,很容易使内存“爆仓”。理想的方法应该是读一部分,写一部分,不管文件有多大,只要时间允许,总会处理完成,这里就需要用到流的概念。

var rs=fs.createReadStream("./data.txt");
var ws=fs.createWriteStream("./cope4.txt");
var chunks="";
rs.on("data",function(data){
	console.log("读取中");
	chunks+=data.toString();
	ws.write(data.toString(),function(){
		console.log("写入中")
	});
});
rs.on("end",function(){
	console.log("文件读取完成");
	console.log(chunks);
})
3.但上方法还不是最完善的,大家都知道读取速度和写入速度是比一致的,比如固态硬盘读取速度为502MB/s 写入282MB/s,如果用上面的方式读取可能导致文件丢失,所以应该是读一部分,写一部分,没写完就暂停读取。由此衍生出一种叫做管道的方式:
fs.createReadStream("./data.txt").pipe(fs.createWriteStream("./copy4.txt"));
(我吃酸萝卜 新浪微博http://www.weibo.com/wcslb          ---李帅醒著)

猜你喜欢

转载自blog.csdn.net/wcslb/article/details/53413289