Last week, we learned how to asynchronously check if a file exists in Node.js. I mentioned that you shouldn't use this technique before reading/writing files, and that I'd show you what to do instead. That's what we're gonna do today!

  1. Reading files
    1. Callback API
    2. Promises API
  2. Writing files
    1. Callback API
    2. Promises API
  3. What if I don't want to overwrite the file?

Reading files

The fs.readFile() method lets you asynchronously read the entire contents of a file. It accepts up to three arguments:

  1. The path to the file.
  2. An object literal of options or a string to specify the encoding.
  3. A callback function with error and data parameters.

In the following examples, I'm using the string 'utf8' as the encoding, which saves me from having to parse the data as a Buffer.

Callback API

import { readFile } from 'fs';

readFile('./package.json', 'utf8', (error, data) => {
if (error) {
throw error;
} else {
console.log(data);
}
});

Promises API

The fsPromises.readFile() method returns a promise that fulfills with the contents of the file.

import { readFile } from 'fs/promises';

readFile('./package.json', 'utf8')
.then(console.log)
.catch(console.error);

Writing files

The fs.writeFile() method lets you asynchronously write data to a file, replacing the file if it already exists. It accepts up to four arguments:

  1. The path to the file.
  2. The data to write to the file.
  3. An object literal of options or a string to specify the encoding.
  4. A callback function with an error parameter.

In the following examples, I'm again using the string 'utf8' as the encoding.

Callback API

import { writeFile } from 'fs';

const file = 'hello_world.txt';
const data = 'Hello, World!';

writeFile(file, data, 'utf8', error => {
if (error) {
throw error;
} else {
console.log(`Successfully wrote '${data}' to ${file}.`);
}
});

Promises API

The fsPromises.writeFile() method returns a promise that fulfills with undefined upon success. This means we don't need to specify a parameter for our callback to the then() method.

import { writeFile } from 'fs/promises';

const file = 'hello_world.txt';
const data = 'Hello, World!';

writeFile(file, data, 'utf8')
.then(() => console.log(`Successfully wrote '${data}' to ${file}.`))
.catch(console.error);

What if I don't want to overwrite the file?

The writeFile() method overwrites the file if it already exists. Next week, we'll learn how to append data to a file using the appendFile() method.

All the code from this post is available as a Gist.