node.js 缓存区和文件系统模块

缓存区

缓存区是在内存中开辟一个临时区域用于存储要运算的字节码
创建缓存区的方式:

创建指定长度的缓存区
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('文件复制已完成!');
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值