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:获取文件扩展名
相关推荐
前端市界2 分钟前
Copilot新模型GPT-5.1太强了!自动生成完美Axios封装,同事都看傻了
前端·前端框架·github
米欧3 分钟前
取消当前正在进行的所有接口请求
前端·javascript·axios
浪里行舟7 分钟前
告别“拼接”,迈入“原生”:文心5.0如何用「原生全模态」重塑AI天花板?
前端·javascript·后端
OpenTiny社区8 分钟前
救命!这个低代码工具太香了 ——TinyEngine 物料自动导入上手
前端·低代码·github
努力学前端Hang9 分钟前
移动端跨平台开发深度解析:UniApp、Taro、Flutter 与 React Native 对比
前端·javascript·react native·react.js
前端九哥20 分钟前
🚫循环里写return,浏览器当场沉默!
前端·javascript
亲爱的马哥27 分钟前
填鸭表单!开箱即用的开源问卷调查系统!
java·前端·低代码·产品经理
米诺zuo36 分钟前
nextjs文件路由、路由组
前端·next.js
加个鸡腿儿38 分钟前
锚点跳转-附带CSS样式 & 阻止页面刷新技术方案
前端·javascript·css
程序猿_极客1 小时前
【期末网页设计作业】HTML+CSS+JS 美食分享主题网站设计与实现(附源码)
javascript·css·html