在 Node.js 中,判断文件是否存在的任务通常涉及文件系统操作。Node.js 提供了内置的fs(文件系统)模块,其中包括了多种方法来操作文件系统,包括判断文件是否存在。在这篇文章中,我们将重点介绍fs模块的几种常用方法。

fs.access 方法

fs.access方法用于检查文件或目录的可访问性。它的语法如下:

const fs = require('fs');
 
fs.access(path, mode, (err) => {
    if (err) {
        // 文件不存在或不可访问
    } else {
        // 文件存在且可访问
    }
});
  • path:要检查的文件或目录的路径。
  • mode:可选参数,指定了检查的权限,默认为fs.constants.F_OK,表示检查文件是否存在。

使用场景

  • 文件上传前检查:在Web应用中,当用户上传文件时,可以使用fs.access来检查目标路径是否已存在同名文件,以避免覆盖重要数据。
  • 日志文件管理:在日志文件的轮换过程中,可以使用fs.access来检查要写入的日志文件是否已存在,如果存在则追加,如果不存在则创建。

fs.existsSync 方法

fs.existsSync方法用于同步地检查文件是否存在。它的语法如下:

const fs = require('fs');
 
if (fs.existsSync(path)) {
    // 文件存在
} else {
    // 文件不存在
}
/**
 * 判断文件是否存在的函数
 * @param {*} path 
 * @returns 
 */
export const isFileExisted = (path) => {
  return fs.existsSync(path);
};

注意❗

注意路径需要为绝对路径

  • path:要检查的文件或目录的路径。

使用场景

  • 同步操作:在某些情况下,需要在代码中等待文件存在性的检查结果,此时可以使用fs.existsSync方法,特别适用于脚本任务或命令行工具。

fs.promises.access 方法

fs.promises.access方法是fs.access的Promise版本,用于异步检查文件是否存在。它的语法如下:

const fs = require('fs').promises;
 
async function checkFileExistence(path) {
    try {
        await fs.access(path);
        // 文件存在且可访问
    } catch (err) {
        // 文件不存在或不可访问
    }
}

使用场景

  • 异步操作:在异步代码中,经常需要等待文件是否存在的检查结果。fs.promises.access方法以Promise的形式返回结果,更适合异步编程风格。

扩展阅读