简单文件读取:
fs.readFile(path[, options], callback)
path 要读取的文件的路径
options 读取的选项
callback 通过回调函数将读取到的内容返回 (err , data)
err 错误对象
data 读取到的数据,返回的是一个buffer对象
为什么返回的是buffer?
- 因为读取的内容不一定都是一个纯文本,可能还有图片,视频,音频
- 如果直接返回字符串,直接乱码(解码乱了),不认识这种二进制的格式,编码无法正常识别
- 因为这些资源文件都是二进制的,返回buffer,通用性更高;
var fs = require('fs');
var path = "C:/Users/xqw/Pictures/xqw/我的头像.jpg";
fs.readFile(path, function(err, data) {if(!err) {// console.log(data.toString());//将data写入到文件
fs.writeFile("hello.jpg", data, function(err) {if(!err) {
console.log("文件写入成功");}});}
});
流式文件读取
- 简单文件读取,同样是一次性全部把文件数据读取到内存中,文件过大,会导致内存溢出;因此对于大文件,流式读取更适合,
- 流式读是将一个大文件,切分为一个一个小的块chunk,依次读取到内存中
var fs = require('fs');
//创建一个可读流
var rs = fs.createReadStream("C:/Users/xqw/Pictures/xqw/我的头像.jpg");
//创建一个可写流
var ws = fs.createWriteStream("a.jpg");
//监听流的开启和关闭
rs.once("open", function(){
console.log("可读流打开了");
});
rs.once("close", function(){
console.log("可读流关闭了");
ws.end();//数据读取完毕,关闭可写流
});
ws.once("open", function(){
console.log("可写流打开了");
});
ws.once("close", function(){
console.log("可写流关闭了");
});
//如果要读取一个可读流中的数据,必须要为可读流绑定一个data事件,data事件绑定完毕,它会自动开始读取数据
rs.on("data", function(data) {// console.log(data);//console.log(data.length);//每次读取的字节数//将读取到的数据写入到可写流中
ws.write(data);//读完了,自动关闭可读流
});
更简单的办法
var fs = require('fs');
//创建一个可读流
var rs = fs.createReadStream("C:/Users/xqw/Pictures/xqw/我的头像.jpg");
//创建一个可写流
var ws = fs.createWriteStream("b.jpg");
rs.once("open", function(){
console.log("可读流打开了");
});
rs.once("close", function(){
console.log("可读流关闭了");
});
ws.once("open", function(){
console.log("可写流打开了");
});
ws.once("close", function(){
console.log("可写流关闭了");
});
//pipe() 可以将可读流中的内容,直接输出到可写流中
rs.pipe(ws);