NodeJs-fs模块
fs 全称为 file system ,称之为 文件系统 ,是 Node.js 中的 内置模块, fs模块可以实现与硬盘的交互,例如文件的创建、删除、重命名、移动,内容的写入读取等以及文件夹相关操作
写入文件#
异步写入#
// 导入fs模块
const fs = require("fs")
// 写入文件
// 参数:file:文件名,如果文件不存在会自动创建
// data:待写入的数据,会覆盖内容
// options:选项设置(可选),可以配置编码、写入模式等等
// callback:写入回调
// 返回值是undefined
fs.writeFile("./test.txt","helloword",err => {
// 写入完成之后会自动调用回调函数,如果写入失败,err是一个错误对象
console.log(err)
})
同步写入#
// 写入文件
// 参数:file:文件名,如果文件不存在会自动创建
// data:待写入的数据,会覆盖内容
// options:选项设置(可选)
fs.writeFileSync("./test1.txt","helloword")
追加写入#
-
异步写入
// 以追加的形式写入 fs.appendFile("./test.txt", "helloword", err => { console.log(err) })
-
同步写入
fs.appendFileSync("./test.txt", "helloword", err => { console.log(err) })
流式写入#
程序打开一个文件是需要消耗资源的 ,流式写入可以减少打开关闭文件的次数,流式写入方式适用于 大文件写入或者频繁写入 的场景, writeFile 适合于 写入频率较低的场景,相当于 程序和文件建立一个通道,打开一次,持续的写入,最终关闭一次
// 导入fs模块
const fs = require("fs")
// 创建写入流对象
// 参数:文件路径、options选项,返回值是一个对象
let ws = fs.createWriteStream("./text.txt")
// 写入的内容
ws.write("aaaa")
ws.write("bbbb")
ws.write("cccc")
// 关闭写入流,可选显示调用
ws.end()
文件读取#
异步读取#
// 导入fs模块
const fs = require("fs")
// 异步读取
// 参数:文件路径、options选项配置、回调函数
fs.readFile("./text.txt",(err,data)=>{
// 读取到文件之后,回调函数会被调用
if (err){
console.log("读取失败")
}else {
// 读取到的内容是一个buffer,可以使用toString转换
console.log(data.toString())
}
})
同步读取#
let data = fs.readFileSync("./text.txt")
console.log(data.toString())
流式读取#
// 导入fs模块
const fs = require("fs")
// 创建读取流对象
let rs = fs.createReadStream("./text.tx")
// 给rs绑定data事件,每次读取64k的数据,每次读取一次后触发一次chunk回调
rs.on("data", chunk => {
console.log(chunk)
})
// 绑定end事件(可选)
// 全部读取完成后,触发end回调
rs.on("end", ()=>{
console.log("关闭")
})
文件移动&重命名#
使用 rename 或 renameSync 来移动或重命名 文件或文件夹
-
异步操作
// 参数:oldPath 文件当前的路径 、newPath 文件新的路径 、callback 操作后的回调 // 重命名 fs.rename("./text.txt","./run.txt", err => { if (err){ console.log(err) }else { console.log("成功") } }) // 文件移动 fs.rename("./run.txt","../data/run.txt",err =>{ console.log(err) })
-
同步操作
// 参数:oldPath 文件当前的路径 、newPath 文件新的路径 fs.renameSync("./run.txt","./text.txt")
文件删除#
-
异步删除
fs.unlink("./text.txt",err => { console.log(err) })
-
同步删除
fs.unlinkSync("./text.txt",err => { console.log(err) })
-
rm方法删除,node14.4版本引入的新方法
// 异步 fs.rm("./text.txt",err => { console.log(err) }) // 同步 fs.rmSync("./text.txt")
文件夹操作#
创建文件夹#
-
异步创建
// 只能创建一层目录 // 参数:文件路径、选项配置、回调函数 fs.mkdir("./data", err => { if (err){ console.log("失败") }else { console.log("成功") } })
-
递归异步创建
// 递归创建-可以创建多层目录,创建src文件夹在src下创建uti文件夹l在util下创建main文件夹 fs.mkdir("./src/util/main",{recursive:true},err => { console.log(err) })
-
同步创建
fs.mkdirSync("./dat1a")
-
递归同步创建
// 递归创建-可以创建多层目录,创建src文件夹在src下创建uti文件夹l在util下创建main文件夹 fs.mkdirSync("./src/util/main",{recursive:true})
读取文件夹#
-
异步读取
fs.readdir("./",(err,data) =>{ console.log(err) console.log(data) // 是一个数组,是文件夹下路径下的资源 })
-
同步读取
let data = fs.readdirSync("./") console.log(data)
删除文件夹#
-
异步删除
// 只能删除一层目录 fs.rmdir("./data",err =>{ console.log(err) }) // 递归删除 fs.rmdir("./data/main",{recursive:true},err =>{ console.log(err) })
-
同步删除
fs.rmdirSync("./data") // 递归同步删除 fs.rmdirSync("./data",{recursive:true})
资源状态#
// 异步
fs.stat("./data",(err,data)=>{
console.log(err)
console.log(data) // 是一个对象,包含文件创建时间、体积、类型等等各种信息
})
// 同步
fs.statSync("./data")
__dirname#
__dirname 与 require 类似,都是 Node.js 环境中的'全局'变量
__dirname
保存着 当前文件所在目录的绝对路径 ,可以使用__dirname 与文件名拼接成绝对路径
let data = fs.readFileSync(__dirname + '/data.txt');
风月都好看,人间也浪漫.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!