如何在 Node.js 中判断一个路径是文件还是文件夹?
Node.js 判断路径类型:使用 fs.statSync 或 fs.stat 方法,并通过 stats 对象的 isFile 和 isDirectory 属性确定。
在 Node.js 环境下,可以通过 fs
模块中的两种方法判断路径是文件还是文件夹:
- 同步方法:使用
fs.statSync()
和fs.lstatSync()
(后者用于不解析符号链接)。 - 异步方法:使用
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
使用(避免回调嵌套)。