04.fs文件系统模块

148 阅读3分钟

1. 什么是fs文件系统模块

fs模块是Node.js官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。
例如

  • fs.readFile()方法,用来读取指定文件中的内容
  • fs.writeFIle()方法,用来向指定的文件中写入内容
如果要在Javascript代码中使用fs模块来操作文件,则需要使用如下方法优先导入
const fs = require('fs')

2. 如何读取文件内容

2.1 fs.readFile()的语法格式

使用 fs.readFile()方法,可以读取指定文件中的内容,语法格式如下:

fs.readFile(path[,options],callback)

参数解读:

  • 参数1:必选参数,字符串,表示文件路径。
  • 参数2:可选参数,表示以什么编码格式来读取文件
  • 参数3:必选参数,文件读取完成之后,通过回调函数拿到读取的结果。 代码示例:
// 1.导入fs模块来操作文件
const fs = require("fs");
// 2.调用fs.readFile()方法读取文件
// 参数1:读取文件的存放路径
// 参数2:读取文件时采用的编码格式,一般默认指定utf8
// 参数3:回调函数,拿到读取失败和成功的结果 err dataStr
fs.readFile("./file/11.txt", "utf8", (err, dataStr) => {
  // 2.1 打印失败的结果、
  // 如果读取成功,则err为null
  console.log("失败", err);
  // 如果读取失败,则err的值为错误对象,dataStr的值为undefined
  // 2.2 打印成功的结果
  console.log("成功", dataStr);
});

3.如何向指定文件中读取内容

3.1 fs.writeFile()的语法格式

使用fs.writeFile()方法,可以向指定的文件中写入内容,语法格式如下:
fs.writeFile(file,data[,options],callback)
  • 参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径
  • 参数2:必选参数,表示要写入内容。
  • 参数3:可选参数,表示以什么格式写入文件内容,默认值是utf8.
  • 参数4:必选参数,文件写入完成后的回调函数
fs.writeFile("./file/2.txt", "abcd", (err) => {
  // 如果文件写入成功,则err的值等于null
  // 如果文件写入失败,则err的值等于一个错误对象
  console.log(err);
  if (err) {
    console.log("文件写入失败");
  } else {
    console.log("文件写入成功");
  }
});
fs.readFile("./file/2.txt", "utf8", (err, dataStr) => {
  // console.log(err);
  console.log(dataStr);
});

3.2 案例:整理成绩

// file/成绩-ok.txt
小红=99 小白=100 小黄=70 小黑=66 小绿=88
const fs = require("fs");
fs.readFile("./file/成绩-ok.txt", "utf8", (err, dataStr) => {
  if (err) {
    console.log("读取失败", err.message);
  } else {
    console.log(dataStr);
    // 把字符串按空格分割成数组
    const arr = dataStr.split(" ");
    console.log(arr);
    const resArr = [];
    // 对每一项数据的=进行字符串替换处理
    arr.forEach((item) => {
      resArr.push(item.replace("=", ":"));
    });
    // \r\n回车换行
    // 将数组的每一项进行合并得到一个新的字符串
    const resStr = resArr.join("\r\n");
    // 调用fs.writeFile()方法,把处理完毕的成绩写入新的文件中
    fs.writeFile("./file/成绩-ok.txt", resStr, (err) => {
      if (err) {
        return console.log("写入文件错误");
      }
      console.log("成绩写入成功");
    });
  }
});

3.3 路径问题

在使用fs模块操作文件时,如果时使用./或者../开头的相对路径时容易出现路径拼接错误问题
原因:代码在运行时,会以执行node命令时所处目录动态拼接被操作文件的完整路径相对路径
// 相对路径
// 如果不在当前文件夹运行会读取失败
fs.readFile("./file/成绩-ok.txt", "utf8", (err, dataStr) => {
  if (err) {
    return console.log("读取文件失败", err.message);
  }
  console.log("读取文件成功", dataStr);
});

// 2.使用绝对路径(完整路径)
// 移植性差,不利于维护
fs.readFile(
  "E:\\Allproject\\Node.js\\day1\\file\\成绩-ok.txt",
  "utf8",
  (err, dataStr) => {
    if (err) {
      return console.log("读取文件失败", err.message);
    }
    console.log("读取文件成功", dataStr);
  }
);

// 3.__dirname 表示当前文件所处的目录
console.log(__dirname);
fs.readFile(__dirname + "/file/成绩-ok.txt", "utf8", (err, dataStr) => {
  if (err) {
    return console.log("读取文件失败", err.message);
  }
  console.log("读取文件成功", dataStr);
});