版权声明:本文为博主 我吃酸萝卜/李帅醒 原创, 未经博主允许不得转载。新浪微博@我吃酸萝卜 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 ---李帅醒著)