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:获取文件扩展名
相关推荐
电蚊拍11 小时前
ADB 实现手机访问电脑上运行的网站,真机调试H5网站
前端
浩男孩11 小时前
🍀上班摸鱼,手搓了个分页器组件
前端
朕的剑还未配妥11 小时前
vue2项目中使用markdown-it插件教程,同时解决代码块和较长单词不换行问题
前端
用户9163574409512 小时前
LeetCode热题100——15.三数之和
javascript·算法
skykun12 小时前
都2026年了还在说闭包吗?
javascript
清羽_ls12 小时前
前端代码CR小知识点汇总
前端·cr
WestWong12 小时前
基于 Web 技术栈的跨端开发模版
前端
饮水机战神12 小时前
小程序被下架后,我连夜加了个 "安全接口"
前端·javascript
小old弟12 小时前
小程序开发:原生 vs 跨平台框架全解析
前端
閞杺哋笨小孩12 小时前
Vue3 点击指令(防抖 / 节流)
前端·vue.js