На этой странице

    У каждого файла есть набор деталей, которые мы можем исследовать средствами Node.js. В частности, с помощью метода stat(), предоставляемого модулем fs.

    Вы вызываете его, передавая путь к файлу, и как только Node.js получит детали файла, он вызовет переданную вами функцию обратного вызова с 2 параметрами: сообщением об ошибке и информацией о файле (stats):

    const fs = require('node:fs');
    
    fs.stat('/Users/joe/test.txt', (err, stats) => {
      if (err) {
        console.error(err);
      }
      // информация о файле доступна в `stats`
    });

    Node.js также предоставляет синхронный метод, который блокирует поток, пока информация о файле не будет готова:

    const fs = require('node:fs');
    
    try {
      const stats = fs.statSync('/Users/joe/test.txt');
    } catch (err) {
      console.error(err);
    }

    Информация о файле содержится в переменной stats. Какого рода информацию можно извлечь с помощью stats?

    Много всего, в том числе:

    • является ли объект директорией или файлом — с помощью stats.isFile() и stats.isDirectory()
    • является ли файл символической ссылкой — с помощью stats.isSymbolicLink()
    • размер файла в байтах — с помощью stats.size.

    Есть и другие продвинутые методы, но основная часть того, что вы будете использовать в повседневном программировании, — это они.

    const fs = require('node:fs');
    
    fs.stat('/Users/joe/test.txt', (err, stats) => {
      if (err) {
        console.error(err);
        return;
      }
    
      stats.isFile(); // true
      stats.isDirectory(); // false
      stats.isSymbolicLink(); // false
      console.log(stats.size); // 1024000 //= 1MB
    });

    При желании можно использовать и метод fsPromises.stat() на основе промисов, предлагаемый модулем fs/promises:

    const fs = require('node:fs/promises');
    
    async function example() {
      try {
        const stats = await fs.stat('/Users/joe/test.txt');
        stats.isFile(); // true
        stats.isDirectory(); // false
        stats.isSymbolicLink(); // false
        console.log(stats.size); // 1024000 //= 1MB
      } catch (err) {
        console.log(err);
      }
    }
    example();

    Подробнее о модуле fs можно почитать в официальной документации.