Node.js(黑马视频)----- fs模块部分

一. fs文件系统模块

1.1 什么是fs文件系统模块

  1. fs文件系统方法

    • fs.readFile()
      • 用来读取指定文件的内容。
    • fs.writeFile()
      • 用来向指定文件写入内容。
  2. 若在js代码中使用fs模块,则先需导入它。

    const fs = require('fs');
    

1.2 读取指定文件的内容

  1. 语法格式如下:

    • fs.readFile(path[, options], callback)
      
    • 参数解读

      • path:必选参数,字符串,表示文件的路径。
      • options:可选参数,表示以什么编码格式读取文件。
      • callback:必选参数,文件读取完后,通过回调函数拿到读取的结果。
  2. 实战代码

    // 导入fs模块
    const { kMaxLength } = require('buffer');
    const fs = require('fs');
    // 使用readfile方法
    fs.readFile('../笔记/css.md', 'utf-8', function (err, datastr) {
        console.log(err);
        console.log('-------------');
        console.log(datastr);
    })
    
    • 结果演示

      • 成功读取,则err为null

        在这里插入图片描述

      • 失败读取,则err为错误对象
        在这里插入图片描述

  3. 如何利用err,来判断是否读取成功?

    • 代码

      // 导入fs模块
      const { kMaxLength } = require('buffer');
      const fs = require('fs');
      // 使用readfile方法
      fs.readFile('../笔记/css1.md', 'utf-8', function (err, datastr) {
          if (err) {
              return console.log(`读取失败,${err.message}`);
          }
          console.log(`读取成功 + ${datastr}`);
      })
      
    • 分析

      • 通过判断err是否为null来判断。

1.3 向指定的文件写入内容

  1. 语法格式如下

    • fs.writeFile(file, data, [, options], callback);
      
    • 参数解读

      • file:必选参数,指定一个文件路径的字符串,表示文件的存放路径。
      • data:必选参数,表示要写入的值。
      • [, options]:可选参数,指定编码。
      • callback:必选参数,文件写入完毕后,通过回调函数拿到结果。
  2. 实战代码

    // 导入模块
    const fs = require('fs');
    // 调用writefile
    fs.writeFile('../笔记/111.txt', '132', function (err) {
        if (err) {
            return console.log(err.message);
        }
    })
    
    • 结果演示
      • 写入成功
        • 控制台无反应,查看文件后发现内容存在。
      • 写入失败
        • 比如datastr不为字符串类型。

1.4 练习 - 考试成绩整理

使用fs文件系统模块,将成绩.txt文件中的考试数据,整理到成绩-ok.txt文件中。

整理前,成绩.txt文件数据如下:
在这里插入图片描述

整理后,成绩-ok.txt文件数据如下:

在这里插入图片描述

解答

  • 代码
    // 导入fs模块
    const fs = require('fs');
    // 读取成绩文件
    fs.readFile('../笔记/成绩.txt', 'utf-8', function (err, datastr) {
        if (err) {
            return console.log(`读取失败 + ${err.message}`);
        }
        console.log(datastr);
        // 空格分隔,之后装入数组中
        const oldArr = datastr.split(' ');
        console.log('oldArr: ' + oldArr);
        // 遍历旧数组,将=替换为:, 装入新数组中
        const newArr = [];
        oldArr.forEach(item => {
            newArr.push(item.replace('=', ':'));
        })
        console.log('newArr: ' + newArr);
        // 将新数组每一个item加上换行后,装入字符串中
        const newStr = newArr.join('\r\n');
        console.log('newStr: ' + newStr);
    
        // 写入成绩-ok文件
        fs.writeFile('../笔记/成绩-ok.txt', newStr, function (err) {
              if (err)
                  return console.log(err.message);
        })
        console.log('写入成功');
    })
    
  • 结果
    在这里插入图片描述

1.5 路径动态拼接问题

  1. 在使用fs模块操作文件时,如果提供的操作路径是以./或…/开头的相对路径,很容易出现动态拼接错误的问题。

  2. 例如,【03. 练习-考试成绩整理.js】文件在Node.js文件夹下。
    在这里插入图片描述

    如果cd…一下,则会出现如下结果:
    在这里插入图片描述

    • 那么原因何在?
      • 因为,代码运行时,会以执行node命令时所在的目录为根目录,动态拼接被操作文件的完整路径。
        • 上图中并不是以LearnQianDuan为根,是因为我在相对路径中使用了…/,导致它返回到了上一级VSCodeProject目录。
      • 那么,由此可知,上述操作失败的原因在于路径拼接错误了。
    • 如何解决呢?
      1. 只需将以./或…/开头的相对路径改为绝对路径即可。
        • 局限性:移植性差,不利维护。

        • 代码

          const fs = require('fs');
          fs.readFile('D:\\develop\\VSCodeProject\\LearnQianDuan\\Node..js\\03. 练习-考试成绩整理.js', 'utf-8', function (err, datastr) {
              if (err) {
                  return console.log(err.message);
              }
          })
          
      2. 利用__dirname拼接相对路径
        • 代码

          const fs = require('fs);
          // 当前js文件所在路径:D:\develop\VSCodeProject\LearnQianDuan\Node.js\04. fs路径动态拼接.js
          const path = __dirname + '/../笔记/1111.txt'
          fs.readFile(path, 'utf-8', function (err, datastr) {
              // 拼接后的路径
              console.log(path);
              // 文件内容
              console.log(datastr);
              if (err) {
                  return console.log(err.message);
              }
          })
          
        • 结果
          在这里插入图片描述

        • 分析

          • __dirname(这里是两个下划线):表示当前文件所在目录。

          • 注意路径拼接时,路径字符串开头必须以 / 开头,否则路径就会拼错,例如

            在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值