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:获取文件扩展名
相关推荐
学网安的肆伍13 小时前
【046-WEB攻防篇】注入工具&SQLMAP&Tamper编写&指纹修改&高权限操作&目录架构
前端·架构
森林的尽头是阳光13 小时前
tree回显问题
javascript·vue.js·elementui
weixin_BYSJ198714 小时前
「课设设计」springboot校园超市助购系统26449 (附源码)
java·javascript·spring boot·python·django·flask·php
Highcharts.js14 小时前
如何下载使用Highcharts Grid 开发web可编辑表格
前端·人工智能·grid 表格·web 表格·在线编辑表格·highcharts表格安装·表格开发工具
用户629605932470515 小时前
从“浏览器根本区分不了”到真正实现:刷新不退出,关闭标签页自动退出,前端判断浏览器关闭和刷新
前端
qetfw15 小时前
MWU:Vue 3 + FastAPI 的 MaaFramework 跨平台 WebUI 源码
前端·vue.js·python·fastapi·开源项目·效率工具
mfxcyh15 小时前
Vue3+Ant Design Vue 实现手动异步文件上传(含大小校验、弹窗上传)
前端·javascript·vue.js
wordbaby15 小时前
Web端热敏标签打印完整解决方案(QZ Tray + 译维A42)
前端
swipe15 小时前
03|Axios 请求进了后端之后:Controller、Request、Response 是怎么接住它的?
前端·后端·全栈
meilindehuzi_a15 小时前
Vue3进阶基础:指令修饰符、v-model表单绑定、动态样式、计算属性与侦听器实战
前端·javascript·vue.js