Reading files with Node.js

The simplest way to read a file in Node.js is to use the fs.readFile() method, passing it the file path, encoding and a callback function that will be called with the file data (and the error):

const  = ('node:fs');  .('/Users/joe/test.txt', 'utf8', (, ) => {  if () {  .();  return;  }  .(); }); 

Alternatively, you can use the synchronous version fs.readFileSync():

const  = ('node:fs');  try {  const  = .('/Users/joe/test.txt', 'utf8');  .(); } catch () {  .(); } 

You can also use the promise-based fsPromises.readFile() method offered by the fs/promises module:

const  = ('node:fs/promises');  async function () {  try {  const  = await .('/Users/joe/test.txt', { : 'utf8' });  .();  } catch () {  .();  } } (); 

All three of fs.readFile(), fs.readFileSync() and fsPromises.readFile() read the full content of the file in memory before returning the data.

This means that big files are going to have a major impact on your memory consumption and speed of execution of the program.

In this case, a better option is to read the file content using streams.

import  from 'fs'; import {  } from 'node:stream/promises'; import  from 'path';  const  = 'https://www.gutenberg.org/files/2701/2701-0.txt'; const  = .(.(), 'moby.md');  async function (, ) {  const  = await ();   if (!. || !.) {  // consuming the response body is mandatory: https://undici.nodejs.org/#/?id=garbage-collection  await .?.();  throw new (`Failed to fetch ${}. Status: ${.}`);  }   const  = .();  .(`Downloading file from ${} to ${}`);   await (., );  .('File downloaded successfully'); }  async function () {  const  = .(, { : 'utf8' });   try {  for await (const  of ) {  .('--- File chunk start ---');  .();  .('--- File chunk end ---');  }  .('Finished reading the file.');  } catch () {  .(`Error reading file: ${.message}`);  } }  try {  await (, );  await (); } catch () {  .(`Error: ${.message}`); } 
Reading Time
2 min
Authors
Contribute
Edit this page