如何在 Node.js 中判断一个路径是文件还是文件夹?

Node.js 判断路径类型:使用 fs.statSync 或 fs.stat 方法,并通过 stats 对象的 isFile 和 isDirectory 属性确定。

Node.js 中等 文件系统 文件管理 异步处理

在 Node.js 环境下,可以通过 fs 模块中的两种方法判断路径是文件还是文件夹:

  1. 同步方法:使用 fs.statSync()fs.lstatSync()(后者用于不解析符号链接)。
  2. 异步方法:使用 fs.stat()fs.promises.stat()(Promise 风格)。

返回的 stats 对象提供:

  • stats.isFile():路径是文件时返回 true
  • stats.isDirectory():路径是文件夹时返回 true

示例代码

const fs = require('fs');

// 同步方法
try {
  const stats = fs.statSync('/path/to/target');
  console.log('Is file?', stats.isFile());     // true 表示文件
  console.log('Is directory?', stats.isDirectory()); // true 表示文件夹
} catch (err) {
  console.error('路径不存在或无法访问:', err);
}

// 异步方法(回调)
fs.stat('/path/to/target', (err, stats) => {
  if (err) throw err;
  console.log('Is file?', stats.isFile());
  console.log('Is directory?', stats.isDirectory());
});

// 异步方法(Promise)
async function checkPathType(path) {
  try {
    const stats = await fs.promises.stat(path);
    return {
      isFile: stats.isFile(),
      isDirectory: stats.isDirectory()
    };
  } catch (err) {
    return { error: err.message };
  }
}

关键区别

  • fs.stat():跟随符号链接解析原始文件。
  • fs.lstat():不解析符号链接,直接返回链接本身的状态。

注意事项

  • 若路径不存在,方法会抛出异常(需用 try/catch 处理)。
  • 异步方法推荐结合 fs.promises 使用(避免回调嵌套)。