Node.js学习之(文件系统fs)

398 阅读4分钟

深入理解 Node.js 文件系统(fs 模块)

在 Node.js 中,文件系统(fs 模块)是一个核心模块,用于处理文件操作。它提供了丰富的功能,包括读取文件、写入文件、更改文件权限等。本文将介绍 fs 模块的基本概念、常见用法以及一些实用技巧。

fs 模块概述

Node.js 的 fs 模块提供了异步和同步的文件系统操作方法。它是一个功能强大且易于使用的工具,可以帮助你处理各种文件操作任务。

读取文件

  • 异步读取
    你可以使用 fs.readFile() 方法来异步读取文件的内容:
const fs = require("fs");

fs.readFile("example.txt", "utf8", (err, data) => {
  if (err) throw err; //失败 err 为错误信息 ,成功 err 为 null
  console.log(data);
});
  • 同步读取
    如果你需要同步读取文件,可以使用 fs.readFileSync() 方法:
const fs = require("fs");

const data = fs.readFileSync("example.txt", "utf8");
console.log(data);

写入文件

  • 异步写入
    要异步写入文件,可以使用 fs.writeFile() 方法:
const fs = require("fs");

fs.writeFile("example.txt", "Hello, world!", "utf8", (err) => {
  if (err) throw err; //写入失败 err 为错误信息 ,写入成功 err 为 null
  console.log("文件已写入");
});
  • 同步写入
    你也可以使用 fs.writeFileSync() 方法进行同步写入:
const fs = require("fs");

fs.writeFileSync("example.txt", "Hello, world!", "utf8");
console.log("文件已写入");
  • 异步追加写入

    你也可以使用 fs.appendFile(file, data[, options], callback) 方法进行异步追加写入:

const fs = require("fs");
fs.appendFile("example.txt", "Nice to meet you!", "utf8", (err) => {
  if (err) throw err; //写入失败 err 为错误信息 ,写入成功 err 为 null
  console.log("文件已写入");
});
  • 同步追加写入

    你也可以使用 fs.appendFileSync(file, data[, options]) 方法进行同步追加写入:

const fs = require("fs");
fs.appendFileSync("example.txt", "Nice to meet you too!", "utf8", (err) => {
  if (err) throw err; //写入失败 err 为错误信息 ,写入成功 err 为 null
  console.log("文件已写入");
});

文件操作

  • 异步检查文件是否存在 要检查文件是否存在,可以使用 fs.existsSync() 方法:
const fs = require("fs");

if (fs.existsSync("example.txt")) {
  console.log("文件存在");
} else {
  console.log("文件不存在");
}
  • 删除文件 要删除文件,可以使用 fs.unlink() 方法:
const fs = require("fs");

fs.unlink("example.txt", (err) => {
  if (err) throw err; //失败 err 为错误信息 ,成功 err 为 null
  console.log("文件已删除");
});

实用技巧

  • 创建目录
    要创建目录,可以使用 fs.mkdir() 方法:
const fs = require("fs");

fs.mkdir("exampleDir", (err) => {
  if (err) throw err; //失败 err 为错误信息 ,成功 err 为 null
  console.log("目录已创建");
});
  • 读取目录内容
    你可以使用 fs.readdir() 方法来读取目录的内容:
const fs = require("fs");

fs.readdir("exampleDir", (err, files) => {
  if (err) throw err; //失败 err 为错误信息 ,成功 err 为 null
  console.log("目录内容:", files);
});

补充

fs.readFile 方法的 options 参数是一个可选对象,用于配置读取文件的行为。以下是 options 对象可能包含的键及其作用:

type Options = {
  encoding?: string | null; //默认值:null 。
  /**
   * 用于指定读取文件时使用的字符编码。如果设置为 null 或省略,
   * 将返回一个 Buffer 对象。常见的编码有 'utf8'、'ascii'、
   * 'base64'、'hex' 等。
   **/
   
  flag?: string; //默认值:'r'。
  /**
   * 文件系统标志,用于指定文件打开方式。例如,'r' 表示只读,
   * 'w' 表示写入(如果文件存在则清空,不存在则创建),
   * 'a' 表示追加等。更多标志可以在 Node.js 文档中查看。
   */

  bufferSize?: number; //默认值:null。
  /**
   * (非标准选项,可能在某些实现中可用)指定读取文件时使用的缓冲区大小。
   * 这会影响内部缓冲区的分配,但请注意,这并不是 Node.js 官方文档中提到的选项。
   */

  autoClose?: boolean; //默认值:true 。
  /**
   * (非标准选项,可能在某些实现中可用)当读取完成后是否关闭文件描述符。
   * 如果设置为 false,则需要手动调用 fs.close() 关闭文件描述符。
   */

  start?: number; //默认值:0 。
  end?: number; //默认值:Infinity。
  /**
   * 如果指定了 encoding,这两个选项可用于指定要读取的文件范围。
   * start 是开始位置,end 是结束位置(不包括)。
   * 这两个值都是基于零的索引。
   */
};

总结

Node.js 的 fs 模块提供了丰富的文件系统操作功能。通过本文的介绍,你应该对如何读取、写入、操作文件以及处理目录有了更深入的理解。在实际项目中,合理地利用 fs 模块将能够提高代码的效率和可靠性。