The fs module in Node.js offers a range of valuable functions to interact with the file system efficiently.

To begin using the fs module, you don’t need to install anything. Since it’s a part of the Node core, you can simply require it using the following code snippet:

const fs = require('fs')

Once you have required the module, you gain access to a wide array of methods, including:

  • fs.access(): Checks if a file exists and if Node has the necessary permissions to access it.
  • fs.appendFile(): Appends data to a file, creating the file if it doesn’t already exist.
  • fs.chmod(): Alters the permissions of a specified file using the provided filename. Related: fs.lchmod(), fs.fchmod()
  • fs.chown(): Modifies the owner and group details of the specified file using the given filename. Related: fs.fchown(), fs.lchown()
  • fs.close(): Closes a file descriptor.
  • fs.copyFile(): Copies a file.
  • fs.createReadStream(): Establishes a readable file stream.
  • fs.createWriteStream(): Sets up a writable file stream.
  • fs.link(): Creates a new hard link to a file.
  • fs.mkdir(): Generates a new folder.
  • fs.mkdtemp(): Creates a temporary directory.
  • fs.open(): Sets the file mode.
  • fs.readdir(): Reads the contents of a directory.
  • fs.readFile(): Reads the content of a file. Related: fs.read()
  • fs.readlink(): Retrieves the value of a symbolic link.
  • fs.realpath(): Resolves relative file path pointers (such as . and ..) to the full path.
  • fs.rename(): Renames a file or folder.
  • fs.rmdir(): Removes a folder.
  • fs.stat(): Retrieves the status of the file specified by the given filename. Related: fs.fstat(), fs.lstat()
  • fs.symlink(): Establishes a new symbolic link to a file.
  • fs.truncate(): Truncates the file identified by the given filename to the specified length. Related: fs.ftruncate()
  • fs.unlink(): Removes a file or symbolic link.
  • fs.unwatchFile(): Ceases watching for changes on a file.
  • fs.utimes(): Adjusts the timestamp of the file specified by the given filename. Related: fs.futimes()
  • fs.watchFile(): Begins watching for changes on a file. Related: fs.watch()
  • fs.writeFile(): Writes data to a file. Related: fs.write()

An interesting aspect of the fs module is that all its methods are asynchronous by default, but they can also function synchronously by appending Sync to their names.

For instance:

  • fs.rename()
  • fs.renameSync()
  • fs.write()
  • fs.writeSync()

This distinction significantly impacts your application flow.

Note that Node 10 introduces experimental support for a promise-based API as well. To learn more, visit here.

To illustrate the usage of the fs.rename() method, let’s consider the asynchronous API with a callback:

const fs = require('fs')

fs.rename('before.json', 'after.json', (err) => {
  if (err) {
    return console.error(err)
  }

  // Success
})

Alternatively, you can employ the synchronous API using a try/catch block to handle errors:

const fs = require('fs')

try {
  fs.renameSync('before.json', 'after.json')
  // Success
} catch (err) {
  console.error(err)
}

The crucial distinction here is that the execution of your script will be blocked in the second example until the file operation is successful.

Tags: Node.js, file system, fs module