Базовое руководство по работе с файловой системой в Node.js

10
технологии 40.webp

Последнее обновление 02.01.2023 — Василий Иванов

Такие читатели, как вы, помогают поддерживать MUO. Когда вы совершаете покупку по ссылкам на нашем сайте, мы можем получать партнерскую комиссию.

Одной из встроенных функций Node.js является манипулирование файловой системой операционной системы с помощью модуля fs. Этот модуль Node.js содержит множество полезных функций для работы с файлами и каталогами.

Файлы просто называются постоянными объектами или фрагментами данных, которые обычно хранятся на жестком носителе, известном как диск или память. Файлы могут быть разных типов, от текстовых файлов до файлов изображений, аудиофайлов и многих других.

Итак, что такое файловая система и как легко взаимодействовать с файловой системой операционной системы в Node.js?

Что такое файловая система?

Файловая система определяет, как операционная система может идентифицировать, организовывать, хранить и получать доступ к файлам, а также выполнять другие операции.

По теме:  Стоит ли Galaxy S23 Ultra на 400 долларов больше, чем S23?

Файловая система операционной системы также выполняет работу по группировке файлов в коллекции, известные как каталоги или папки. Обычные файлы и каталоги являются наиболее распространенными частями файловой системы, с которыми часто взаимодействуют среди многих других.

Некоторые примеры файловых систем включают файловую систему новой технологии (NTFS), файловую систему UNIX (UFS) и иерархическую файловую систему (HFS).

Что такое модуль Node.js fs?

Модуль Node.js fs — это встроенная библиотека, предоставляемая Node.js для работы с файловой системой любой операционной системы, поддерживающей Node. Модуль fs легко доступен и является библиотекой для файловых операций, таких как чтение из файлов или запись данных в файлы в Node.js.

Он очень часто используется с модулями path и os для выполнения различных операций с файлами. Чтобы использовать модуль fs в своих программах, вы можете импортировать его в свой исходный код, как показано в коде ниже.

// CommonJS
const fs = require('fs')

// ES6
import fs from 'fs'

Что такое модуль пути Node.js?

Вы можете использовать модуль пути Node.js для управления путями к файлам. Он включает в себя утилиты для простого взаимодействия с путями к файлам и каталогам. Стандартной практикой является совместное использование модулей fs и path для выполнения задачи. Это связано с тем, что большинство функций модуля fs зависят от путей к целевым файлам или каталогам для работы.

Вы можете импортировать модуль пути в свой код с помощью следующего синтаксиса:

// CommonJS
const path = require('path')

// ES6
import path from 'path'

Общие функции для доступа к файловой системе в Node.js

Вот наиболее часто используемые функции Node.js fs и модуля пути, а также способы их использования для взаимодействия с файлами и каталогами.

Работа с путями

  1. path.resolve: это функция для разрешения пути из списка инструкций пути, переданных в качестве параметров. Например:
    path.resolve('home', 'projects', 'web');
    // returns <path_to_current_directory>/home/projects/web

    path.resolve('home/projects/web', '../mobile');
    // returns <path_to_current_directory>/home/projects/mobile
  2. path.normalize: функция нормализации возвращает правильный и нормализованный путь из заданного входного пути. Например:
    path.normalize('home/projects/web/../mobile/./code');
    // returns home/projects/mobile/code
  3. path.join: эта функция строит путь из нескольких сегментов. Например:
    path.join('home', 'projects', '../', 'movies');
    // returns home/movies
  4. path.basename: функция basename возвращает последний сегмент пути. Вы можете использовать его двумя способами:
    path.basename('home/projects/web/index.js');
    // returns index.js

    path.basename('home/projects/web/index.js', '.js');
    // removes the extension and returns 'index'
  5. path.dirname: эта функция возвращает путь к последнему каталогу заданного пути. Пример:
    path.dirname('home/projects/web/index.js');
    // returns home/projects/web
  6. path.extname: с помощью этой функции вы можете получить расширение файла по заданному пути.
    path.extname('home/projects/web/index.js');
    // returns '.js'

Открытие и закрытие файлов

  1. fs.open: это функция для синхронного открытия или создания файла в Node.js. Синхронная форма fs.open — fs.openSync. fs.open принимает четыре аргумента: путь к файлу, флаги, режим открытия и функцию обратного вызова. Флаги и режим открытия имеют значение по умолчанию, и вы можете узнать больше о них из документации Node.js fs.open.
    const filePath = path.join(__dirname, '/videos/newVideo.mp4');
    // __dirname returns the path to the current working directory.
    // filePath = <path_to_current_directory>/videos/newVideo.mp4

    fs.open(filePath, (error, fileDescriptor) => {
    // handle errors
    console.log(fileDescriptor); // prints an integer representing the file descriptor
    })
  2. fs.close: рекомендуется всегда закрывать любые открытые файлы, когда они больше не нужны. Для этого в Node.js есть функция fs.close:
    fs.open(filePath, (error, fileDescriptor) => {
    // handle errors, such as 'file/directory does not exist'
    console.log(fileDescriptor);

    // close the file
    fs.close(fileDescriptor, (error) => {
    // handle errors
    console.log('File closed successfully');
    });
    })

Создание и удаление

  1. fs.mkdir: работает так же, как команда терминала mkdir, которая создает новый каталог. В качестве параметров он принимает путь, режим (необязательно) и функцию обратного вызова. Вы можете использовать его следующим образом:
    const dirPath = path.join(__dirname, 'newDirectory');
    fs.mkdir(dirPath, (error) => {
    // handle errors
    console.log('New directory created successfully');
    });
  2. fs.unlink: эта функция удаляет или удаляет файл по пути, переданному в качестве аргумента. Рассмотрим пример кода ниже:
    const filePath = path.join(_dirname, 'oldFile.js');

    fs.unlink(filePath, (error) => {
    // handle errors
    console.log('File has been deleted successfully');
    });
  3. fs.rmdir: этот метод удаляет каталог по указанному пути. Это очень похоже на использование метода unlink:
    const dirPath = path.resolve('home', 'projects', 'web');

    fs.rmdir(dirPath, (error) => {
    // handle errors
    console.log('Directory successfully deleted');
    })

Метаданные файла

  1. fs.exists: метод exists проверяет, существует ли файл по заданному пути. Реализация выглядит следующим образом:
    let filePath = path.join(__dirname, 'index.html');

    fs.exists(filePath, (exists) => {
    console.log(exists) // true or false
    })
  2. fs.stat: это синхронная функция, которая возвращает свойства файла. Он возвращает объект fs.Stats, который предоставляет некоторые методы доступа к свойствам файла. Вот пример:
    fs.stat('index.js', (error, stats) => {
    console.log(stats); // prints low level properties of the file
    stats.isFile(); // returns true
    stats.isDirectory(); // returns false
    })

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

Управление файловой системой в Node.js

Обширность модуля fs позволяет очень легко получать доступ к файлам и взаимодействовать с ними в любой операционной системе. Когда вы используете его вместе с модулем пути, вы открываете больше возможностей и можете манипулировать файловой системой по своему усмотрению.

Основным преимуществом Node.js является его переносимость. Вы можете разрабатывать свои приложения на любой платформе и развертывать их где угодно, не беспокоясь об основных проблемах совместимости.