Buffer/fs模块/path模块

  1. Node.js中可以使用BOM和DOM的API,可以使用console和定时器API
  2. Node.js的顶级对象global,也可以用globalThis访问顶级对象

1. Buffer

Buffer中文译为[缓冲区],是一个类似于Array 的对象,用于表示固定长度的字节序列(换句话说,Buffer就是一段固定长度的内存空间,用于处理二进制数据)

Buffer介绍与创建

Node.js中创建Buffer的方式主要如下几种:
1.Buffer.alloc

//创建了一个长度为10字节的Buffer,相当于申请了10字节的内存空间,每个字节的值为0
let buf_1=Buffer.alloc(10);//结果为<Buffer 00000000000000000000>

2.Buffer.allocUnsafe

//创建了一个长度为10字节的Buffer, buffer中可能存在旧的数据,可能会影响执行结果,所以叫 unsafelet 
buf_2=Buffer.allocUnsafe(10);

3.Buffer.from

//通过字符串创建Buffer
let buf_3=Buffer.from( 'hello');
//通过数组创建Buffer
//十进制转化为二进制给机器看,在终端显示的是十六进制方便人看
let buf_4=Buffer.from([105,108,111,118,101, 121, 111,117]);

Buffer与字符串的转化

可以借助toString方法将Buffer转为字符串

let buf_4=Buffer.from([105,108,111,118,101,121,111,117]);
console.log(buf_4.toString());//utf-8
//结果是iloveyou
let buf=Buffer.from('hello');
console.log(buf[0].toString(2));//查看底层二进制

toString默认是按照utf-8编码方式进行转换的。

Buffer的读写

Buffer可以直接通过[ ]的方式对数据进行处理。

//读取
console.log(buf_3[1]);
//修改
buf_3[1]=97;
//查看字符串结果
console.log(buf_3.toString());//aello

注意:
1.如果修改的数值超过255,则超过8位数据会被舍弃
2.一个utf-8的字符一般占3个字节

2. 计算机基础

基本组成:CPU,内存,硬盘
程序一般保存在硬盘中,软件安装的过程就是将程序写入硬盘的过程。
程序在运行时会加载进入内存,然后由CPU读取并执行程序
进程和线程;进程包含线程

3. fs模块

fs(文件系统)fs模块可以实现与硬盘的交互 例如文件的创建、删除、重命名、移动,还有文件内容的写入、读取,以及文件夹的相关操作
操作fs时一定要有引入fs模块

fs文件写入

在这里插入图片描述

fs异步与同步

在这里插入图片描述

// 1.导入fs模块
const fs=require('fs');
// 2.写入文件
fs.writeFile('./座右铭.txt','三人行必有我师焉',err=>{
    // err写入失败:错误对象,写入成功:null
    if(err){
        console.log("写入失败");
        return;
    }
    console.log("写入成功");
})
console.log(1+1)
//从上而下执行代码时异步写入会先不执行回调函数,先执行下面的代码,因此先输出console.log(1+1)再输出回调函数

同步写入:fs.writeFileSync(‘/data.txt’,‘test’);

fs的追加写入

\r\n换行

// 1.导入fs模块
const fs=require('fs');
// 2.调用appendFile
fs.appendFile('./座右铭.txt','\r\n择其善者而从之。。。',err=>{
        if(err){
        console.log("写入失败");
        return;
    	}
    	console.log("写入成功");
});

在这里插入图片描述

流式写入creatWriteStream()

在这里插入图片描述

文件写入场景

在这里插入图片描述

文件读取

读取文件应用场景·电脑开机·程序运行·编辑器打开文件·查看图片·播放视频·播放音乐·Git查看日志·上传文件·查看聊天记录等
在这里插入图片描述

异步同步读取

在这里插入图片描述
选项配置是可选参数,其他两个必选

// 异步读取
fs.readFile('./座右铭.txt',(err,data)=>{
    if(err){
        console.log("读取失败");
        return;
    }
    // 不转化为字符串终端现实的是Buffer形式
    console.log(data.toString());
})
// 同步读取
let data = fs.readFileSync('./座右铭.txt');
console.log(data.toString());
流式读取
// 1.导入fs模块
const fs=require('fs');
// 2.创建读取流对象
const rs=fs.createReadStream('../资料/笑看风云.mp4');
// 3.绑定data流事件 用于获取读取到的数据 chunk块
rs.on('data',chunk=>{
    // console.log(chunk);
    console.log(chunk.length);//65536字节=>64KB 流式读取每一次读取64KB字节
})
// 4. end 可选事件 处理大文件时能提高效率
rs.on('end',()=>{
    console.log('读取完成');
})

复制

//方式一readFile
 //读取文件内容
let data =fs.readFilesync('./资料/笑看风云.mp4');
//写入文件
fs.writeFileSync("./资料/笑看风云-2.mp4",data);

//方式二流式操作(占用内存相对较少)
//创建读取流对象
const rs=fs.createReadstream("./资料/笑看风云.mp4');
//创建写入流对象
const WS=fs.createwritestream('.:/资料/笑看风云-3.mp4');
//绑定data事件
rs.on('data',chunk =>{
	Ws.write(chunk);
);
//绑定data事件简便操作
rs.pipe(ws);

文件重命名与移动

在这里插入图片描述

文件删除

在Node.js中,我们可以使用unlinkunlinkSync来删除文件

语法:
fs.ulink(path, callback)
fs.unlinkSync(path)
参数说明:
path文件路径·
callback操作后的回调

代码示例:

1.调用fs
const fs =require('fs');
2.调用unlink方法
fs.unlink('./test.txt',err=>{
	if(err)throw err;
	console. log(删除成功);
);
fs.unlinkSync(./test2.txt');

//调用rm方法14.4 rmSync
fs.rm('./论语.txt",err =>{
	if(err){
		console.log(’删除失败~');
		return;
	}
	console.log('删除成功');
})

文件夹操作

在这里插入图片描述

//{recursive:true}递归创建嵌套文件夹
fs.mkdir('./a/b/c',{recursive:true},err=>{
    if(err){
        console.log("失败");
        return;
    }
    console.log("成功");
});

在这里插入图片描述
在这里插入图片描述
不推荐使用rmdir推荐使用rm

查看资源状态

在这里插入图片描述

fs路径

在这里插入图片描述
相对路径bug:
相对路径参照物:命令行的工作目录

//绝对路径 '全局变量(不是真正意义上的)',保存的是文件所在目录的绝对路径
console.log(_dirname)
fs.writeFilesync(_dirname+'/index.html','love');
//!!不是./

重命名练习

文件上传网盘序列先排列0开头的再排列1开头的,可以在个位数的文件前加’0‘来解决:

const fs=require('fs');
// 读取code文件
const files=fs.readdirSync('./code1');
// 遍历数组
files.forEach(item=>{
    // 拆分文件名
    let data=item.split('-');
    let [num,name]=data;
    // 判断
    if(Number(num)<10){
        num='0'+num;
    }
    // 创建新文件
    let newName=num+'-'+name;
    fs.renameSync(`./code1/${item}`,`./code1/${newName}`);
})

4. path模块

在这里插入图片描述

// resolve 解决 补全路径
console.log(path.resolve(__dirname,'./index.html'));// ./可以不写
console.log(path.resolve(__dirname,'/index.html'));//D:/index.html
console.log(path.resolve(__dirname,'/index.html','./test'));//后面会跟一个相对路径 进行拼接 D:/index.html/test
  • 15
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值