Node.js check if file exists


How do i check the existence of a file?

In the documentation for the module fs there's a description of the method fs.exists(path, callback). But, as I understand, it checks for the existence of only directories. And I need to check the file!

How can this be done?

This question is tagged with node.js fs

~ Asked on 2013-07-17 12:18:59

The Best Answer is


Why not just try opening the file ?'YourFile', 'a', function (err, fd) { ... }) anyway after a minute search try this :

var path = require('path'); 

path.exists('foo.txt', function(exists) { 
  if (exists) { 
    // do something 

// or 

if (path.existsSync('foo.txt')) { 
  // do something 

For Node.js v0.12.x and higher

Both path.exists and fs.exists have been deprecated


Changed: else if(err.code == 'ENOENT')

to: else if(err.code === 'ENOENT')

Linter complains about the double equals not being the triple equals.

Using fs.stat:

fs.stat('foo.txt', function(err, stat) {
    if(err == null) {
        console.log('File exists');
    } else if(err.code === 'ENOENT') {
        // file does not exist
        fs.writeFile('log.txt', 'Some log\n');
    } else {
        console.log('Some other error: ', err.code);

~ Answered on 2013-07-17 12:35:33


Edit: Since node v10.0.0we could use fs.promises.access(...)

Example async code that checks if file exists:

async function checkFileExists(file) {
  return fs.promises.access(file, fs.constants.F_OK)
           .then(() => true)
           .catch(() => false)

An alternative for stat might be using the new fs.access(...):

minified short promise function for checking:

s => new Promise(r=>fs.access(s, fs.constants.F_OK, e => r(!e)))

Sample usage:

let checkFileExists = s => new Promise(r=>fs.access(s, fs.constants.F_OK, e => r(!e)))
checkFileExists("Some File Location")
  .then(bool => console.log(´file exists: ${bool}´))

expanded Promise way:

// returns a promise which resolves true if file exists:
function checkFileExists(filepath){
  return new Promise((resolve, reject) => {
    fs.access(filepath, fs.constants.F_OK, error => {

or if you wanna do it synchronously:

function checkFileExistsSync(filepath){
  let flag = true;
    fs.accessSync(filepath, fs.constants.F_OK);
    flag = false;
  return flag;

~ Answered on 2016-01-26 06:49:21

Most Viewed Questions: