Node.js_基础知识(fs模块 - 文件操作)

写入

  1. 文件操作
    • 流式写入:fs.createWriteStream(path[, options])
      • 可以减少打开关闭文件的次数
      • 适用于:大文件写入、频繁写入
      • 参数说明:
        • path:文件路径
  2. 文件夹操作:
    • 调用mkdir方法:fs.mkdir('./a/b/c', err => {})
      • 递归创建文件夹:加参数recursive fs.mkdir('./a/b/c', {recursive: true}, err => {})

读取

  1. 流式读取:fs.createReadStream(path[, options])

    • 读取文件返回的是Buffer对象,需要通过toString方法转成字符串
    • 每次读取的最大内容为64KB,更节省内存使用空间
    javascript 复制代码
    const rs = fs.createReadStream(path);
    rs.on('data', chunk => {
    	console.log(chunk.length)
    	// console.log(chunk.toString())
    })
    rs.on('end', () => {
    	console.log('读取完成')
    })

复制

  1. 通过流式操作读取文件:const rs = fs.createReadStream(path);

  2. 通过流式操作写入文件:const ws = fs.createWriteStream(path2);

  3. 绑定data事件:

    javascript 复制代码
    rs.on('data', chunk => {
    	ws.write(chunk);
    })
  4. 更简便的使用方法:rs.pipe(ws),边读取边写入

重命名和移动

重命名和移动本质都是通过rename更改文件路径

  1. 重命名:fs.rename(文件路径1,同路径的文件2, err =>{})
  2. 移动:fs.rename(文件路径1,不同路径的文件2, err =>{})

删除

  1. 文件操作:
    • 调用unlink方法:fs.unlink(文件路径,err => {})
    • 调用rm方法(node 14.4新增):fs.rm(文件路径,err => {})
  2. 文件夹操作:
    • 调用rmdir方法(不推荐):fs.rmdir('./a/b/c', err => {})
      • 递归删除文件夹:加参数recursive fs.mkdir('./a/b/c', {recursive: true}, err => {})
    • 调用rm方法(推荐,同删除文件方法):fs.rm('./a/b/c', err => {})
      • 递归删除文件夹:加参数recursive fs.mkdir('./a/b/c', {recursive: true}, err => {})

路径操作

  1. 相对路径:参考的是命令行的工作目录,不是运行脚本所在的目录
  2. 绝对路径:使用__dirname获取文件所在目录的绝对路径 fs.createReadStream(__dirname + '1.txt', '文件内容。。。')
  3. 规范的绝对路径:使用path.resolve创建规范的绝对路径,解决__dirname反斜杠的问题

查看资源信息

  1. 获取文件名:通过readdir获取 fs.readdir(path, options, callback ),回调返回目录中所有文件名的数组

    javascript 复制代码
    fs.readdir(__dirname + '1.txt', (err, files) => { 
      if (err) 
        console.log(err); 
      else { 
        files.forEach(file => { 
          console.log(file); 
        }) 
      } 
    }) 
  2. 其他信息:通过stat获取 fs.stat(__dirname + '1.txt', (err, data) => {})

错误处理

javascript 复制代码
fs.readFile(filePath, (err, data) => {
	switch(err.code){
		case 'ENOENT': // 404 处理
		case 'EPERM': // 403 处理
		default: // 500 处理
	}
})

补充:

  1. 换行:\r\n
  2. path模块获取路径功能:
    • reslove:拼接规范的绝对路径
    • sep:获取操作系统的路径分隔符
    • parse:解析路径并返回文件信息对象
    • basename:获取文件名
    • dirname:获取路径目录
    • extname:获取文件扩展名
相关推荐
六月的可乐4 分钟前
【干货】小程序虚拟瀑布流探索小结
前端·react.js·小程序
techdashen11 分钟前
Rust 项目管理动态 — 2026 年 3 月
前端·人工智能·rust
Ajie'Blog13 分钟前
2026年AI安全与治理:从幻觉到系统性欺骗的攻防之战
javascript·人工智能·安全·rpc·json·rag
智码看视界1 小时前
老梁聊全栈系列:Vue3核心与组合式API深度解析
javascript·vue.js·ecmascript
想吃火锅10059 小时前
【leetcode】405.数字转换为十六进制数js
开发语言·javascript·ecmascript
原则猫11 小时前
HOOKS 背后机制
前端
码语智行11 小时前
首页导航跳转功能深度解析-系统内和系统外
前端
阿猫的故乡11 小时前
Vue过渡动画从入门到装X:淡入淡出、滑动、列表动画、第三方库全搞定
前端·javascript·vue.js
IManiy12 小时前
总结之Vibe Coding前端骨架
前端
小和尚敲木头12 小时前
vue3 vite动态拼接图片路径
javascript