缓存区
缓存区是在内存中开辟一个临时区域用于存储要运算的字节码
创建缓存区的方式:
创建指定长度的缓存区
var buf=new Buffer(大小)
按指定的数组(编码)创建缓存区
var buf=new Buffer([10进制编码])
//var buf=new Buffer([97,98,99,65,66]);
按指定字符创建缓存区
var buf=new Buffer("字符串")
写入缓存区
buf.writer("字符串")
读取缓存区
buf.toString();
缓存区复制
buf.copy(buf2);
文件系统模块(fs)
读文件
直接读取:
将硬盘上(该文件)的所有内容全部读入内存以后才出发回调函数
两种写法:
异步:定义一个回调函数,接收读取到的内容
fs .readFile("文件路径",function(err,reslut){
//操作
})
同步:几乎所有的fs函数都有同步版本,只需要在异步版本后面添加Sync即可
var data=fs.readFileSync("文件路径");
流式读取:
将数据从硬盘中读取一节就出发回调函数,实现大文件操作
直接读取
var fs = require ("fs");
//异步读取文件
fs.readFile("./data.json",function(err,data){
console.log(data.toString());
})
//同步读取文件
var data =fs.readFileSync("./data.json");
console.log(data.toString());
写文件
同步版本:
fs.writeFileSync("文件名","数据");
异步版本:
fs.writeFile("文件名","数据",function(err){
//写完文件后的操作
})
var fs=reuire("fs");
var hello="hello Node.js";
fs.writeFile("index.txt",hello,function(err){
if(err){
throw err;
}else{
console.log("文件写入成功");
}
})
读取文件信息
//异步
fs.stat("文件名",function(err,state){
//state是文件的信息对象,包含了常用的文件信息
size 文件大小(字节)
mtime 文件修改时间
birthtime 文件创建时间
//方法
.isFile() 判断当前查看的对象是不是一个文件
.isDirectory() 判断是不是一个目录
})
//同步
fs.statSync("文件名");
fs.stat("./data.json",function(err.state){
console.log(state.isDirectory());
})
删除文件
fs.unlink("文件路径",function(err){
//.....
})
fs.unlik("./jquery.js",function(){
if(err){
throw err;
}else{
console.log("删除成功");
}
})
目录操作
创建目录:
fs.mkdir("目录名",function(err){
//...
})
读取目录中的文件以及文件夹列表
fs.readdir("目录名",function(err,list){
//list是一个包含目录名以及文件名的数组
})
删除空目录
fs.rmdir("目录名",function(err){
//...
})
//注意:不能删除非空目录
//创建名为node的文件夹
fs.mkdir("./node",function(err){
if(err){
throw err
}else{
console.log("创建成功")
}
})
//读取名为node的文件夹以及文件夹列表
fs.readdir("./node",function(err,list){
console.log(list);
})
//删除空目录
fs.rmdir("./node",function(){
if(err){
throw err;
}else{
console.log("删除成功")
}
})
流
什么是流?
所有互联网传输的数据都是以流的方式,流式一组有起点有终点的数据传输方式
流的操作:
流式读取文件:一节一节的读取文件,一节64kb===>65536字节
以流的方式写文件:一节一节的写文件
读取流
读取流:
var stram=fs.createReadStream("文件名");
读取流的事件:
data事件:当读取到内容就执行
end事件:读取完成时执行
error错误事件:读取错误时执行
var fs=require("fs");
var stream=fs=createReadStream("./node.txt");
stream.on("data",function(str){
console.log(str);
})
stream.on("end",function(){
console.log("数据读取完了");
})
stream.on("error",function(err){
console.log("读取出错");
})
写入流
写入流:
var stream=fs.createWriteStream("文件名");
stream.write("数据");
写入流事件:
finish事件:写入完成时触发
error事件:写入错误时触发
end事件:声明写入数据结束的标识符
var stream=fs.createWriteStream("./file.txt");
stream.write("hell node.js")
stream.write("2019.10.20");
stream.end();//以流的方式写入数据必须显式的声明结束
stream.on("finish",function(){
console.log("数据写完了");
})
stream.on("error",function(err){
console.log("出错了");
})
管道(pipe)
管道是node.js中流的实现机制,直接定义一个输出流,导入输入流
管道语法:
输入流.pipe(输出流)
readerStream.pipe(writerStream);
//实现大文件的复制
var fs=require('fs');
var s1=fs.createReadStream('./file3.txt');
var s2=fs.createWriteStream('./file6.txt');
//1.使用管道实现大文件的复制
s1.pipe(s2);
//2.以流的方式实现大文件复制,读取一节存一节
s1.on('data',function(a){
s2.write(a);
});
s1.on('end',function(){
s2.end();
console.log('文件复制已完成!');
});