Node.js | fs.readFileSync () Метод

Опубликовано: 2 Августа, 2021

Метод fs.readFileSync () - это встроенный интерфейс прикладного программирования модуля fs, который используется для чтения файла и возврата его содержимого.

В методе fs.readFile () мы можем читать файл неблокирующим асинхронным способом, но в методе fs.readFileSync () мы можем читать файлы синхронно, т.е. мы говорим node.js блокировать другие параллельные процесс и выполнить текущий процесс чтения файла. То есть, когда вызывается метод fs.readFileSync (), программа исходного узла прекращает выполнение, и узел ожидает выполнения функции fs.readFileSync (), после получения результата метода выполняется оставшаяся программа узла.

Синтаксис:

 fs.readFileSync (путь, параметры)

Параметры:

  • path: принимает относительный путь к текстовому файлу. Путь может иметь тип URL. Файл также может быть дескриптором файла. Если оба файла находятся в одной папке, просто укажите имя файла в кавычках.
  • options: это необязательный параметр, который содержит кодировку и флаг, кодировка содержит спецификацию данных. Его значение по умолчанию - null, что возвращает необработанный буфер, а флаг содержит указание операций в файле. Его значение по умолчанию - «r».

Возвращаемое значение: этот метод возвращает содержимое файла.

Пример 1:

  • Содержимое файла input.txt:
     Это текстовые данные, которые хранятся в файле input.txt.
  • index.js файл:




    // Node.js program to demonstrate the
    // fs.readFileSync() method
    // Include fs module
    const fs = require( 'fs' );
    // Calling the readFileSync() method
    // to read 'input.txt' file
    const data = fs.readFileSync( './input.txt' ,
    {encoding: 'utf8' , flag: 'r' });
    // Display the file data
    console.log(data);
  • Выход:
    Это текстовые данные, которые хранятся в файле input.txt.
    

Теперь вопрос в том, чем этот метод fs.readFileSync () отличается от метода fs.readFile (). Пример, в котором мы можем узнать, когда использовать методы fs.readFileSync () и fs.readFile ().

Допустим, есть два входных файла input1.txt и input2.txt, и оба файла сохранены в одной папке.

Пример 2:

  • Содержимое файла input1.txt:
     (1) Это текстовые данные, которые хранятся в файле input1.txt.
  • Содержимое файла input2.txt:
     (2) Это текстовые данные, которые хранятся в файле input2.txt.
  • index.js файл:




    // Node.js program to demonstrate the
    // fs.readFileSync() method
    // Include fs module
    const fs = require( 'fs' );
    // Callling the fs.readFile() method
    // for reading file 'input1.txt'
    fs.readFile( './input1.txt' ,
    {encoding: 'utf8' , flag: 'r' },
    function (err, data) {
    if (err)
    console.log(err);
    else
    console.log(data);
    });
    // Calling the fs.readFileSync() method
    // for reading file 'input2.txt'
    const data = fs.readFileSync( './input2.txt' ,
    {encoding: 'utf8' , flag: 'r' });
    // Display data
    console.log(data);
  • Выход:
    (2) Это текстовые данные, которые хранятся в файле input2.txt.
    (1) Это текстовые данные, которые хранятся в файле input1.txt.
    

Наблюдение: мы можем заметить, что когда мы вызываем метод fs.readFile (), который читает input1.txt, а после этого мы вызываем метод fs.readFileSync (), который читает файл input2.txt , но видим output мы обнаруживаем, что сначала считывается файл input2.txt, затем файл input1.txt , это происходит потому, что, когда компилятор компилирует файл node.js, он сначала вызывает метод fs.readFile (), который читает файл, но параллельно он продолжает компилировать и оставшуюся программу, после этого он вызывает метод fs.readFileSync (), который читает другой файл, при вызове метода readFileSync () компилятор останавливает другой параллельный процесс (который здесь читает файл 'input1.txt' из метода readFile () ) и продолжает текущий процесс до его конца, всякий раз, когда текущий процесс завершается, компилятор возобновляет оставшийся процесс, поэтому мы видим, что сначала печатается содержимое input2.txt, а не input1.txt . Итак, мы можем использовать метод fs.readFileSync () для таких задач, как приостановка других параллельных процессов и синхронное чтение файла.

Ссылка: https://nodejs.org/api/fs.html#fs_fs_readfilesync_path_options