1. fs是什么?
fs是file system的简写,意为文件系统。
fs模块:可以实现与硬盘交互,例如文件的创建、删除、重命名、移动,文件内容的写入、读取,以及文件夹的相关操作。
2.fs模块文件写入,包含同步和异步
- 异步写入语法:fs.writeFile(file,data[,options],callback)
示例:新建一个文件,文件名:写入文件.txt,写入内容:使用node的fs模块写入文件
// 引入fs模块
const fs = require('fs');
// 写入文件
fs.writeFile('./写入文件.txt','使用node的fs模块写入文件',(err)=>{
// err 写入失败时返回的错误对象,写入成功时返回null
if(err){
console.log(err);
}else{
console.log('写入成功');
}
})
- 同步写入语法:fs.writeFileSync(file,data[,options]),没有回调传参。
3.fs模块的文件追加写入,包含同步和异步
- 异步追加写入语法:fs.appendFile(file,data[,options],callback)
fs.appendFile('./写入文件.txt','\n追加内容',(err)=>{
// err 追加失败时返回的错误对象,追加成功时返回null
if(err){
console.log(err);
}else{
console.log('追加成功');
}
})
- 同步追加写入语法:fs.appendFileSync(file,data[,options]),没有回调传参。
注意:fs.writeFile和fs.appendFile都是写入文件,区别在于fs.writeFile会覆盖文件,而fs.appendFile不会覆盖文件,而是追加内容。
但是,想要用fs.writeFile()追加的话,可利用fs.writeFile()的第三个参数配置对象,设置flag为'a',即可实现追加写入。看下面示例:
fs.writeFile('./追加文件.txt','使用node的fs模块追加文件',{flag:'a'},(err)=>{
// err 写入失败时返回的错误对象,写入成功时返回null
if(err){
console.log(err);
}else{
console.log('写入成功');
}
})
4.fs模块的文件流式写入
// 导入 fs
const fs = require('fs');
// 创建写入流对象
const ws = fs.createWriteStream('./流式文件写入.txt');
//写入
ws.write('流式写入文件:');
ws.write('\n更适合写入频次高的写入场景');
ws.write('\n而writeFile是一次性的,适合频次低的写入场景');
// 关闭写入流
ws.close() //可要可不要
写入应用场景 :下载文件,安装软件,保存程序日志(如Git),编辑器保存文件,视频录制。
那什么时候使用文件写入呢?当需要持久化保存数据的时候。
5.fs模块的文件读取
异步读取语法:fs.readFile(path,[options],callback)
同步读取语法:fs.readFileSync(path,[options])
// 导入fs
const fs = require('fs')
//异步读取
fs.readFile('./流式文件写入.txt',(err,data)=>{
if(err){
console.log('读取失败')
return;
}
console.log(data) //返回的是一个Buffer
console.log(data.toString()) //将Buffer转换为字符串
})
//同步读取
const data = fs.readFileSync('./流式文件写入.txt')
console.log(data) //返回的是一个Buffer
console.log(data.toString()) //将Buffer转换为字符串
文件读取应用场景 :电脑开机、程序运行、编辑器打开文件、查看图片、播放视频、播放音乐、Git查看日志、上传文件、查看聊天记录等
6.fs模块的文件流式读取
//导入fs
const fs = require('fs')
//创建读取流对象
const rs = fs.createReadStream('./resource/用于文件流式读取.mp4')
//绑定rs的data事件,chunk是每次读取到的数据块
rs.on('data',(chunk)=>{
// console.log(chunk) //输出的是多个Buffer
console.log(chunk.length) // 每个都是65536字节,64kb
// console.log(chunk.toString()) //出现的是乱码,因为读取的是视频资源,不能转化成UTF-8
})
//读取结束
rs.on('end',()=>{
console.log('读取结束')
})
7.fs模块的文件复制
可以同步复制也可以流式复制。其中流式复制占用的内存要小很多,这个可以通过process.memoryUsage()来查看。
查看具体方法,请移步链接:https://juejin.cn/post/7413940909262061604
【写在后面】:学习视频连接: https://b23.tv/rXRE9Cx