Accéder au contenu
On this page

    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}`);
    }