Node.js 的 fs (File System) 模块是用于处理文件和目录的内置模块。它提供了一组方法,用于执行文件的读取、写入、删除等操作。在本教程中,我们将深入介绍如何使用 Node.js 的 fs 模块来进行文件系统操作。

安装

Node.js 自带了 fs 模块,因此不需要额外安装。只需在你的脚本中使用 require 命令引入 fs 模块即可:

const fs = require('fs');

基本文件操作

读取文件 - fs.readFile(path[, options], callback)

配置项:

  • path:要读取的文件的路径。
  • options(可选):一个可选的对象,用于指定读取文件的选项,如编码格式等。常用的选项有:
  • encoding:指定文件的编码格式,默认为 null,表示返回原始的 Buffer 对象。常用的编码格式包括 'utf8'、'ascii'、'base64' 等。
  • flag:用于指定文件的打开标志,默认为 'r',表示以只读模式打开。
  • callback:处理文件读取结果的回调函数,接受两个参数 err 和 data,其中 err 表示读取过程中的错误信息,data 表示读取到的文件内容。

要读取文件内容,可以使用 fs.readFile() 方法。以下是读取文件的示例:

fs.readFile('path/to/file', 'utf8', (err, data) => {
  if (err) {
    console.error('Error reading file:', err);
  } else {
    console.log('File content:', data);
  }
});

写入文件 - fs.writeFile(file, data[, options], callback)

配置项:

  • file:要写入的文件的路径。
  • data:要写入的内容。可以是字符串或者 Buffer 对象。
  • options(可选):一个可选的对象,用于指定写入文件的选项,如编码格式、文件打开标志等。常用的选项有:
    • encoding:指定文件的编码格式,默认为 'utf8'。
  • mode:设置文件的权限,默认为 0o666。
  • flag:用于指定文件的打开标志,默认为 'w',表示以覆盖写入模式打开。
  • callback:写入文件完成后的回调函数,接受一个参数 err,表示写入过程中的错误信息。

要写入文件,可以使用 fs.writeFile() 方法。以下是写入文件的示例:

const content = 'Hello, World!';

fs.writeFile('path/to/file', content, 'utf8', (err) => {
  if (err) {
    console.error('Error writing file:', err);
  } else {
    console.log('File written successfully!');
  }
});

追加文件内容 - fs.appendFile(file, data[, options], callback)

配置项:

  • file:要追加内容的文件的路径。
  • data:要追加的内容。可以是字符串或者 Buffer 对象。
  • options(可选):一个可选的对象,用于指定追加文件的选项,如编码格式、文件打开标志等。常用的选项有:
    • encoding:指定文件的编码格式,默认为 'utf8'。
  • mode:设置文件的权限,默认为 0o666。
  • flag:用于指定文件的打开标志,默认为 'a',表示以追加模式打开。
  • callback:追加文件完成后的回调函数,接受一个参数 err,表示追加过程中的错误信息。

如果你想要追加内容到已有文件中,可以使用 fs.appendFile() 方法。以下是追加文件内容的示例:

const additionalContent = 'This is additional content.';

fs.appendFile('path/to/file', additionalContent, 'utf8', (err) => {
  if (err) {
    console.error('Error appending file:', err);
  } else {
    console.log('Content appended successfully!');
  }
});

删除文件 - fs.unlink(path, callback)

配置项:

  • path:要删除的文件的路径。
  • callback:删除文件完成后的回调函数,接受一个参数 err,表示删除过程中的错误信息。

要删除文件,可以使用 fs.unlink() 方法。以下是删除文件的示例:

fs.unlink('path/to/file', (err) => {
  if (err) {
    console.error('Error deleting file:', err);
  } else {
    console.log('File deleted successfully!');
  }
});

进阶文件操作

检查文件是否存在 - fs.access(path[, mode], callback)

配置项:

  • path:要检查的文件的路径。
  • mode(可选):一个可选的常量,用于指定文件的测试模式,默认为 fs.constants.F_OK,表示检查文件是否存在。其他可选的模式包括 fs.constants.R_OK(检查文件是否可读)、fs.constants.W_OK(检查文件是否可写)和 fs.constants.X_OK(检查文件是否可执行)。
  • callback:检查文件完成后的回调函数,接受一个参数 err,表示检查过程中的错误信息。

要检查文件是否存在,可以使用 fs.exists() 方法。这个方法已被弃用,推荐使用 fs.access() 方法来替代。以下是检查文件是否存在的示例:

const filePath = 'path/to/file';

fs.access(filePath, fs.constants.F_OK, (err) => {
  if (err) {
    console.error('File does not exist:', err);
  } else {
    console.log('File exists!');
  }
});

重命名文件 - fs.rename(oldPath, newPath, callback)

配置项:

  • oldPath:原文件路径。
  • newPath:新文件路径。
  • callback:重命名文件完成后的回调函数,接受一个参数 err,表示重命名过程中的错误信息。

要重命名文件,可以使用 fs.rename() 方法。以下是重命名文件的示例:

const oldFilePath = 'path/to/oldFile';
const newFilePath = 'path/to/newFile';

fs.rename(oldFilePath, newFilePath, (err) => {
  if (err) {
    console.error('Error renaming file:', err);
  } else {
    console.log('File renamed successfully!');
  }
});

读取目录内容 - fs.readdir(path[, options], callback)

配置项:

  • path:要读取目录内容的路径。
  • options(可选):一个可选的对象,用于指定读取目录的选项,如编码格式等。常用的选项有:
    • encoding:指定目录的编码格式,默认为 'utf8'。
  • callback:读取目录内容完成后的回调函数,接受两个参数 err 和 files,其中 err 表示读取过程中的错误信息,files 是一个包含目录内容的数组。

要读取目录的内容,可以使用 fs.readdir() 方法。以下是读取目录内容的示例:

const directoryPath = 'path/to/directory';

fs.readdir(directoryPath, (err, files) => {
  if (err) {
    console.error('Error reading directory:', err);
  } else {
    console.log('Directory contents:', files);
  }
});

创建目录 - fs.mkdir(path[, options], callback)

配置项:

  • path:要创建的目录的路径。
  • options(可选):一个可选的对象,用于指定创建目录的选项,如目录权限等。
  • recursive:一个布尔值,指定是否递归创建目录,默认为 false。如果设为 true,则会递归创建目录及其上级目录。
  • mode:设置目录的权限,默认为 0o777。
  • callback:创建目录完成后的回调函数,接受一个参数 err,表示创建过程中的错误信息。

要创建目录,可以使用 fs.mkdir() 方法。以下是创建目录的示例:

const directoryPath = 'path/to/newDirectory';

fs.mkdir(directoryPath, { recursive: true }, (err) => {
  if (err) {
    console.error('Error creating directory:', err);
  } else {
    console.log('Directory created successfully!');
  }
});

总结

在本教程中,我们详细介绍了如何使用 Node.js 的 fs 模块执行文件系统操作。你学会了读取文件、写入文件、追加文件内容、删除文件以及其他常见操作,例如重命名文件、检查文件是否存在、读取目录内容和创建目录。

此外,fs 模块还提供了其他一些方法和选项,以支持更多的文件系统操作。你可以在 Node.js 的官方文档中查找详细的文档和示例,以深入了解 fs 模块的更多功能和用法。