Node.js 中如何查询文件是否存在

2025-01-10 19:13:31   小编

Node.js 中如何查询文件是否存在

在Node.js开发过程中,经常需要判断文件是否存在,这在很多场景下都非常关键,比如在读取或写入文件之前,先确认文件是否存在可以避免很多不必要的错误。下面将介绍几种在Node.js中查询文件是否存在的方法。

使用 fs.statSync 方法

fs.statSync 是Node.js内置文件系统模块(fs)中的同步方法。它可以获取文件或目录的详细信息,包括文件是否存在。示例代码如下:

const fs = require('fs');

function checkFileExistsSync(filePath) {
    try {
        const stats = fs.statSync(filePath);
        return stats.isFile();
    } catch (error) {
        return false;
    }
}

const filePath = 'test.txt';
const exists = checkFileExistsSync(filePath);
if (exists) {
    console.log('文件存在');
} else {
    console.log('文件不存在');
}

在这段代码中,fs.statSync 尝试获取指定路径的文件信息。如果文件存在,它将返回文件的状态信息,通过 stats.isFile() 可以判断它是否为文件。如果文件不存在,fs.statSync 会抛出错误,在 catch 块中捕获并返回 false

使用 fs.stat 方法

fs.statfs.statSync 的异步版本,适合在异步操作场景中使用。示例代码如下:

const fs = require('fs');

function checkFileExists(filePath, callback) {
    fs.stat(filePath, (err, stats) => {
        if (err) {
            return callback(false);
        }
        return callback(stats.isFile());
    });
}

const filePath = 'test.txt';
checkFileExists(filePath, (exists) => {
    if (exists) {
        console.log('文件存在');
    } else {
        console.log('文件不存在');
    }
});

这里 fs.stat 接收文件路径和一个回调函数。当操作完成时,回调函数会被调用,通过判断 err 是否存在来确定文件是否存在。如果 err 存在,说明文件不存在,反之则通过 stats.isFile() 判断是否为文件。

使用 fsPromises.stat 方法

Node.js 的 fs/promises 模块提供了基于 Promise 的文件系统操作方法,使得代码更具可读性和可维护性。示例代码如下:

const fs = require('fs').promises;

async function checkFileExistsAsync(filePath) {
    try {
        const stats = await fs.stat(filePath);
        return stats.isFile();
    } catch (error) {
        return false;
    }
}

const filePath = 'test.txt';
checkFileExistsAsync(filePath).then((exists) => {
    if (exists) {
        console.log('文件存在');
    } else {
        console.log('文件不存在');
    }
});

在这段代码中,fsPromises.stat 返回一个 Promise,通过 await 等待操作完成。如果成功获取文件状态信息,通过 stats.isFile() 判断文件是否存在,捕获到错误则返回 false

通过以上几种方法,开发者可以根据具体的需求和场景,灵活选择在Node.js中查询文件是否存在的方式。

TAGS: 文件系统 文件存在判断 Node.js开发 Node.js文件查询

欢迎使用万千站长工具!

Welcome to www.zzTool.com