定义:node.js是一个开源的跨平台的js的运行环境。
作用:
- 开发服务器应用;
- 开发工具类应用例如webpack;
- 开发桌面端应用:比如VScode。
nodejs中不能使用window ,可以用grobal
不能使用document,可以使用console.log和定时器;
buffer(缓冲器)
定义:一个类似与数组的对象,用来表示固定长度的字节,本质上是一段内存空间,用来处理二进制数据。
Buffer不需导入,是个全局对象,三种创建方式:
- alloc
let buf=Buffer.alloc(10) //创建了10字节的buffer
- allocUnsafe
//可能包含旧的内存数据,但速度快
let buf=Buffer.allocUnsafe(10)
- from
Buffer.form('hello')//会转成16进制
buffer转成字符串:tostring
Buffer.from([105,108,111,118,101,121,111,117])
console.log(buf3.toString()) //iloveyou
buffer溢出
let buf=Buffer.from('hello')//68 65 6c 6c 6f
buf[0]=361 //0001 0110 1001 二进制最高255,溢出后会把前4位舍去,最后留下0110 1001 = 69
console.log(buf) //69 65 6c 6c 6f
fs模块
作用:可以实现与硬盘的交互,比如文件、文件夹的创建、删除移动等,还能对文件内容进行写入和读取;
文件操作
1.文件写入和创建
文件写入场景,需要持久化保存数据时,比如:
- 下载文件;
- 安装软件;
- 日志保存;
- 编辑器保存文件;
- 视频录制;
writeFile异步写入 新建或已有的某个文件并写入某些内容,异步执行
fs.writeFile(file,data,options,callback)
file:文件名;
data:写入的数据;
options:选项设置;(可选参数)
callback:回调函数;
fs.writeFile('./demo.js','demo',err=>{
if(err){
return console.log('失败');
}
console.log('成功');
})
writeFileSync同步写入
fs.writeFileSync(file,data)
appendFileSync追加写入 给某个文件追加写入某些内容,异步执行(参数与writeFile一样)
appendFileSync同步追加写入
createWriteStream写入流对象 持续写入,减少关闭文件次数
const ws = fs.createWriteStream('./book.txt')
//通过write写入内容
ws.write('1111')
ws.write('2222')
ws.write('3333')
ws.close();//关闭
2.文件读取
应用场景比如:
电脑开机;
运行程序;
查看图片;
编辑器打开文件;
readFile异步读取 读取某个文件内容,异步执行
fs.readFile(file,options,callback) 返回读取的内容是一个buffer,需要tostring
file:文件名;
options:选项设置;(可选参数)
callback:回调函数;
fs.readFile('./demo.js',err=>{
if(err){
return console.log('失败');
}
console.log('失败');
})
readFileSync同步读取
fs.readFileSync(file,data)
createReadStream流式读取 一块一块读取
const rs = fs.createWriteStream('./book.txt')
//通过data绑定事件 chunk 块
rs.on('data',chunk=>{
console.log(chunk) //chunk 读取的内容 64kb 65536字节
})
rs.on('end',()=>{ //可以不写
console.log('读取完成')
})
3.复制文件
简单方式:rs.pipe(ws)
普通方式:
const ws =fs.createWriteStream('./mp4/倒数1.mp3');
const rs = fs.createReadStream('./mp4/倒数.mp3')
rs.on('data',chunk=>{
ws.write(chunk)
})
rs.on('end',()=>{
console.log(process.memoryUsag);
})
process.memoryUsage() 可以查看进程所占内存空间
4.删除文件
- fs.unlink(file,err=>{})
fs.unlinkSync(file,err=>{}) - fs.rm(file,err=>{}) //node14.4以上
fs.rmSync(file,err=>{})
5.文件重命名
fs.rename(oldUrl,newUrl,err=>{})
文件夹操作
1.创建文件夹
fs.mkdir(dirname,err=>{}) 创建demo文件夹
fs.mkdir('demo',err=>{})
fs.mkdir(dirname,{recursive:true},err=>{}) 创建多层级的文件夹
fs.mkdir('a/b/demo',{recursive:true},err=>{})
2.读取文件夹
fs.readdir(dir,(err,data)=>{}) data:读取到的文件中的文件名称数组
3.删除文件夹
fs.rmdir(dir,err=>{}) 删除没有子文件的空文件夹
fs.rmdir(dir,{recursive:true},err=>{}) 删除多层级的文件夹 不建议使用,该方法将被删除
fs.rm(dir,{recursive:true},err=>{}) 删除多层级的文件夹 推荐
4.查看资源信息
fs.stat(file,(err,data)=>{}) //data返回资源信息,有一下方法可以查看资源是文件还是文件夹
data.isFile() //查看该资源是否是一个文件
data.isDirectory() //查看该资源是否是一个文件夹
浙公网安备 33010602011771号