介绍:fs全称为file system,称之为文件系统,是Node.js中的内置模块,可以对计算机中的磁盘进行操作
文件写入
文件写入就是将数据保存到文件中
1.1 writeFile异步写入
语法: fs.writeFile(file,data[,options],callback)
参数说明:
file 文件名
data 待写入的数据
options 选项设置(可选)
callback 写入回调
返回值:undefined
代码:
// 1.导入fs模块
const fs = require('fs')
// 2.写入文件
fs.writeFile('./座右铭.txt', '巧者劳而智者忧', err => {
//err 写入失败:错误对象 写入成功:null
if (err) {
console.log('写入失败')
return
}
console.log('写入成功')
})
1.2 writeFileSync同步写入
语法:fs.writeFileSync(file,data[,options])
返回值:undefined
// 1.导入fs模块
const fs = require('fs')
// 2.写入文件
fs.writeFile('./座右铭.txt', '巧者劳而智者忧', err => {
//err 写入失败:错误对象 写入成功:null
if (err) {
console.log('写入失败')
return
}
console.log('写入成功')
})
//同步写入
fs.writeFileSync('./data.txt', 'test')
1.3 appendFile/appendFileSync追加写入
appendFile作用是在文件尾部追加内容,appendFile语法与writeFile语法完全相同
语法:
fs.appendFile(file, data[, options], callback)
fs.appendFileSync(file, data[, options])
返回值:都为undefined
代码:
fs.appendFile('./座右铭.txt',',无能者无所求。',err=>{
//判断
if(err){
console.log('写入失败')
return
}
console.log('追加写入成功')
})
fs.writeFile('./座右铭.txt', '\r\n饱食而遨游,泛若不系之舟,虚而遨游者也。', { flag: 'a' }, err => {
if (err) {
console.log('写入失败')
return
}
console.log('写入成功')
})
1.4 createWriteStream流式写入
语法:fs.createWriteStream(path[,options])
返回值:Object
代码:
// 1.导入fs
const fs = require('fs')
// 2.创建写入流对象
const ws = fs.createWriteStream('./昨夜朱楼梦.txt')
// 3.write
ws.write('昨夜朱楼梦,今宵水国吟。\r\n')
ws.write('岛云蒸大海,岚气接丛林。\r\n')
ws.write('月本无今古,情缘自浅深。\r\n')
ws.write('汉南春历历,焉得不关心。\r\n')
// 4.关闭通道
ws.close()
总结:
程序打开一个文件是需要消耗资源的 ,流式写入可以减少打开关闭文件的次数。
流式写入方式适用于 大文件写入或者频繁写入 的场景, writeFile 适合于 写入频率较低的场景
1.5 写入文件的场景
当需要持久化保存数据的时候,应该想到文件写入
文件读取
2.1 异步读取
语法: fs.readFile(path[,options],callback)
参数说明:
path 文件路径
options 选项配置
callback 回调函数
返回值: undefined
代码:
// 导入fs模块
const fs = require('fs')
fs.readFile('./文章.txt', (err, data) => {
if (err) throw err
console.log(data)
})
fs.readFile('./文章.txt','utf-8', (err, data) => {
if (err) throw err
console.log(data)
})
2.2 readFileSync同步读取
语法:fs.readFileSync(path[,options])
返回值: string | Buffer
代码:
let data=fs.readFileSync('./文章.txt')
let data2=fs.readFileSync('./文章.txt','utf-8')
2.3 createReadStream 流式读取
语法:fs.createReadStream(path[,options])
返回值: Object
代码:
// 创建读取流对象
let rs=fs.createReadStream('./文章.txt')
// 每次取出64k,数据后执行一次,data 回调
rs.on('data',data=>{
console.log(data)
console.log(data.length)
})
//读取完毕后,执行end回调
rs.on('end',()=>{
console.log('读取完成')
})
文件移动和重命名
语法:
fs.rename(oldPath,newPath,callback)
fs.renameSync(oldPath,newPath)
参数说明:
oldPath 文件当前的路径
newPath 文件新的路径
代码:
fs.rename('./笔记.txt','./node/笔记.txt',(err)=>{
if(err) throw err
console.log('书写完成')
})
fstat.renameSync('./笔记.txt','./node/笔记.txt')
文件删除
语法:
fs.unlink(path.callback)
fs.unlinkSync(path)
代码:
const fs = require('fs')
fs.unlink('./test.txt', err => {
if (err) throw err
console.log('删除成功')
})
fs.unlinkSync('./test1.txt')
文件夹操作
| 方法 | 说明 |
|---|---|
| mkdir/mkdirSync | 创建文件夹 |
| readdir/readdirSync | 读取文件夹 |
| rmdir/rmdirSync | 删除文件夹 |
3.1 mkdir 创建文件夹
语法:
fs.mkdir(path[,options],callback)
fs.mkdirSync(path[,options])
代码:
//异步创建文件夹
fs.mkdir('./test',err=>{
if(err) throw err
console.log('创建成功')
})
// 递归异步创建
fs.mkdir('./1/2/3',{recursive:true},err=>{
if(err) throw err
console.log('递归创建成功')
})
// 递归同步创建文件夹
fs.mkdirSync('./1/2/3',{recursive:true})
3.1 mkdir 创建文件夹
语法:
fs.readdir(path[,options],callback)
fs.readdirSync(path[,options])
代码:
// 异步读取
fs.readdir('./test',(err,data)=>{
if(err) throw err
console.log(data)
})
// 同步读取
let data=fs.readdirSync('./test')
console.log(data)
3.1 rmdir 删除文件夹
语法:
fs.rmdir(path[,options],callback)
fs.rmdirSync(path[,options])
代码:
// 异步删除文件夹
fs.rmdir('./test',err=>{
if(err) throw err
console.log('删除成功')
})
// 异步递归删除文件夹
fs.rmdir('./1',{recursive:true},err=>{
if(err){
console.log(err)
}
console.log('递归删除')
})
// 同步递归删除文件夹
fs.rmdirSync('./1',{recursive:true})
查看资源状态
语法:
fs.stat(path[,options],callback)
fs.statSync(path[,options])
代码:
// 异步获取状态
fs.stat('./test',(err,data)=>{
if(err) throw err
console.log(data)
})
// 同步获取状态
let data=fs.statSync('./test')
相对路径和绝对路径
-
相对路径
-
绝对路径
D:/Program Fileswindows系统下的绝对路径
/usr/binLinux系统下的绝对路径
__dirname
__dirname与require类似,都是Node.js环境中的‘全局’变量
__dirname保存着当前文件所在目录的绝对路径,可以使用__dirname与文件名拼接成绝对路径
代码:
let data=fs.readFileSync(__dirname+'/data.txt')
console.log(data)
注意: 使用fs模块时,尽量使用__dirname将路径转化为绝对路径,这样可以避免相对路径产生的bug