Node.js File System

Node.js includes fs module to access physical file system. The fs module is responsible for all the asynchronous or synchronous file I/O operations.

Let's see some of the common I/O operation examples using fs module.

Reading a File

Use the fs.readFile() method to read the physical file asynchronously.

Signature:
fs.readFile(fileName [,options], callback)

Parameter Description:

  • filename: Full path and name of the file as a string.
  • options: The options parameter can be an object or string which can include encoding and flag. The default encoding is utf8 and default flag is "r".
  • callback: A function with two parameters err and fd. This will get called when readFile operation completes.

The following example demonstrates reading existing TestFile.txt asynchronously.

Example: Reading a File
var fs = require('fs');

fs.readFile('TestFile.txt', function (err, data) {
    if (err) 
        throw err;

    console.log(data);
});

The above example reads TestFile.txt (on Windows) asynchronously and executes callback function when read operation completes. This read operation either throws an error or completes successfully. The err parameter contains error information if any. The data parameter contains the content of the specified file.

The following is a sample TextFile.txt file.

TextFile.txt
This is test file to test fs module of Node.js

Now, run the above example and see the result as shown below.

C:\> node server.js
This is test file to test fs module of Node.js

Use the fs.readFileSync() method to read file synchronously, as shown below.

Example: Reading File Synchronously
var fs = require('fs');

var data = fs.readFileSync('dummyfile.txt', 'utf8');
console.log(data);

Writing a File

Use the fs.writeFile() method to write data to a file. If file already exists then it overwrites the existing content otherwise it creates a new file and writes data into it.

Signature:
fs.writeFile(filename, data[, options], callback)

Parameter Description:

  • filename: Full path and name of the file as a string.
  • Data: The content to be written in a file.
  • options: The options parameter can be an object or string which can include encoding, mode and flag. The default encoding is utf8 and default flag is "r".
  • callback: A function with two parameters err and fd. This will get called when write operation completes.

The following example creates a new file called test.txt and writes "Hello World" into it asynchronously.

Example: Creating & Writing a File
var fs = require('fs');

fs.writeFile('test.txt', 'Hello World!', function (err) { 
    if (err)
        console.log(err);
    else
        console.log('Write operation complete.');
});

In the same way, use the fs.appendFile() method to append the content to an existing file.

Example: Append Content to a File
var fs = require('fs');

fs.appendFile('test.txt', 'Hello World!', function (err) { 
                        if (err)
        console.log(err);
                        else
        console.log('Append operation complete.');
});

Open File

Alternatively, you can open a file for reading or writing using the fs.open() method.

Signature:
fs.open(path, flags[, mode], callback)

Parameter Description:

  • path: Full path with name of the file as a string.
  • Flag: The flag to perform operation
  • Mode: The mode for read, write or readwrite. Defaults to 0666 readwrite.
  • callback: A function with two parameters err and fd. This will get called when file open operation completes.

Flags

The following table lists all the flags which can be used in read/write operation.

Flag Description
r Open file for reading. An exception occurs if the file does not exist.
r+ Open file for reading and writing. An exception occurs if the file does not exist.
rs Open file for reading in synchronous mode.
rs+ Open file for reading and writing, telling the OS to open it synchronously. See notes for 'rs' about using this with caution.
w Open file for writing. The file is created (if it does not exist) or truncated (if it exists).
wx Like 'w' but fails if path exists.
w+ Open file for reading and writing. The file is created (if it does not exist) or truncated (if it exists).
wx+ Like 'w+' but fails if path exists.
a Open file for appending. The file is created if it does not exist.
ax Like 'a' but fails if path exists.
a+ Open file for reading and appending. The file is created if it does not exist.
ax+ Like 'a+' but fails if path exists.

The following example opens an existing file and reads its content.

Example:File open and read
var fs = require('fs');

fs.open('TestFile.txt', 'r', function (err, fd) {
    
    if (err) {
        return console.error(err);
    }
    
    var buffr = new Buffer(1024);
    
    fs.read(fd, buffr, 0, buffr.length, 0, function (err, bytes) {
       
    if (err) throw err;
            
    // Print only read bytes to avoid junk.
    if (bytes > 0) {
        console.log(buffr.slice(0, bytes).toString());
    }
        
    // Close the opened file.
    fs.close(fd, function (err) {
        if (err) throw err;
    });
    });
});

Delete File

Use the fs.unlink() method to delete an existing file.

Signature:
fs.unlink(path, callback);

The following example deletes an existing file.

Example:Delete a File
var fs = require('fs');

fs.unlink('test.txt', function () {
    console.log('File Deleted Successfully.');
});

Important method of fs module

Method Description
fs.readFile(fileName [,options], callback) Reads existing file.
fs.writeFile(filename, data[, options], callback) Writes to the file. If file exists then overwrite the content otherwise creates new file.
fs.open(path, flags[, mode], callback) Opens file for reading or writing.
fs.rename(oldPath, newPath, callback) Renames an existing file.
fs.chown(path, uid, gid, callback) Asynchronous chown.
fs.stat(path, callback) Returns fs.stat object which includes important file statistics.
fs.link(srcpath, dstpath, callback) Links file asynchronously.
fs.unlink(path, callback); Delete a file.
fs.symlink(destination, path[, type], callback) Symlink asynchronously.
fs.rmdir(path, callback) Renames an existing directory.
fs.mkdir(path[, mode], callback) Creates a new directory.
fs.readdir(path, callback) Reads the content of the specified directory.
fs.utimes(path, atime, mtime, callback) Changes the timestamp of the file.
fs.exists(path, callback) Determines whether the specified file exists or not.
fs.access(path[, mode], callback) Tests a user's permissions for the specified file.
fs.appendFile(file, data[, options], callback) Appends new content to the existing file.

Visit Node.js documentation for more information on fs module.