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:获取文件扩展名
相关推荐
酷酷的阿云10 分钟前
不用ECharts!从0到1徒手撸一个Vue3柱状图
前端·javascript·vue.js
微信:1379712058712 分钟前
web端手机录音
前端
齐 飞18 分钟前
MongoDB笔记01-概念与安装
前端·数据库·笔记·后端·mongodb
暮毅23 分钟前
10.Node.js连接MongoDb
数据库·mongodb·node.js
神仙别闹35 分钟前
基于tensorflow和flask的本地图片库web图片搜索引擎
前端·flask·tensorflow
aPurpleBerry1 小时前
JS常用数组方法 reduce filter find forEach
javascript
GIS程序媛—椰子1 小时前
【Vue 全家桶】7、Vue UI组件库(更新中)
前端·vue.js
DogEgg_0012 小时前
前端八股文(一)HTML 持续更新中。。。
前端·html
ZL不懂前端2 小时前
Content Security Policy (CSP)
前端·javascript·面试
乐闻x2 小时前
ESLint 使用教程(一):从零配置 ESLint
javascript·eslint