Node js удалить файл

Обновлено: 21.11.2024

NodeJS — отличный инструмент, который может делать многое, но только сегодня я узнал, что его можно использовать для удаления файлов. Я уже давно знаю, что вы можете использовать его для создания файлов путем записи в пункт назначения с использованием потока записи или другого метода записи файлов. Однако удаление файлов оставалось для меня загадкой до сегодняшнего дня. Вот как вы можете это сделать, а также как удалить несколько с помощью промисов.

Для выполнения этой, казалось бы, обыденной задачи мы воспользуемся методом fs.unlink() из пакета файловой системы nodeJS. Вот синтаксис этого метода:

Итак, все, что нам нужно сделать, это вызвать fs.unlink(), передать путь к файлу, который вы хотите удалить, а затем передать обратный вызов, который будет вызываться после удаления файла или ошибки процесса.

В документации NodeJS для этого метода есть отличный пример того, как мы можем его использовать:

Что-то более продвинутое

Вы спросите, зачем мне нужно было удалять файлы? Ладно, возможно, вы не спрашивали об этом, но я все равно вам скажу.

Поскольку все и их собаки создавали API-интерфейсы COVID-19, я тоже решил создать такой, который можно использовать для запроса данных о пандемии и ее влиянии на разные страны и территории по всему миру. Если вам интересно, вы можете ознакомиться с моим проектом здесь, но на момент написания статьи он был еще далек от завершения и представлял собой скорее учебный проект, чем что-либо готовое к производству.

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

Однако мне нужно было сделать кое-что еще. немного более асинхронный.

Итак, вот как я удалил несколько файлов с помощью fs.unlink и promises.

Обещания

Если вас интересует полный фрагмент кода, перейдите к концу статьи. Если вам интересно, как это работает; продолжайте читать.

Первое, что нам нужно сделать, это импортировать наши пакеты, а затем определить функцию для всего нашего кода. Но самое интересное заключается в том, что поскольку мы удаляем несколько файлов, нам нужно немедленно вернуть Promise.all() . Причина, по которой мы это делаем, заключается в том, что, хотя Promise.all() ожидает, что все обещания внутри него будут разрешены, сам Promise.all() фактически возвращает обещание, поэтому, немедленно возвращая одно, мы можем ожидать этого обещания контейнера в любой родительской функции (функциях). .

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

Теперь, когда мы разобрались с этим, давайте перейдем к основной части. Для каждого файла, который нам нужно удалить, нам нужно вернуть новое обещание, чтобы Promise.all() было что ожидать.

Небольшое примечание, но не повторяйте ошибку, которую я впервые сделал, используя .forEach() для циклического обхода массива, вместо этого используйте .map(), потому что .forEach() никогда не вернет никаких значений, кроме 'undefined' что нам не поможет, так как нам нужны обещания. Итак, обязательно используйте .map() следующим образом:

Итак, теперь у нас есть новый промис, возвращаемый для каждого из наших значений в массиве с помощью метода .map(), все, что нам нужно сделать сейчас, это удалить файлы, разрешить промисы, а затем сделать некоторую основную ошибку. обработка.

Давайте рассмотрим удаление файлов.

Здесь мы обернули весь наш код оператором try (не беспокойтесь, за ним последует оператор catch), а затем вызвали метод fs.unlink(), о котором мы говорили ранее. Поскольку мы делаем это для нескольких файлов, мы не можем жестко указать путь к файлу, который хотим удалить, как в примере из документации. Итак, вместо этого мы использовали литералы шаблонов из ES6, чтобы позволить нам передать имя файла, который мы хотим удалить, в путь к каталогу, в котором он будет расположен (это работает, потому что все файлы находятся в одном каталоге).

После этого, независимо от того, будет ли код ошибочным или успешным, будет вызвана функция обратного вызова, переданная в fs.unlink(). Мы передаем значение 'err' обратному вызову, чтобы мы могли выдать ошибку, если она есть. Если ошибки нет, мы просто записываем в консоль, какой файл был удален, и идем дальше.

Теперь, из-за того, как работает мой код в этом проекте, мы фактически конвертируем все файлы csv в собственные файлы JSON, прежде чем объединять их в один файл, что означает, что на самом деле нужно удалить 2 файла для каждого значения, к счастью, я предусмотрительно называть их одинаково (больше похоже на лень). Итак, это просто случай добавления другого расширения файла, которое мне нужно удалить, как еще один вызов fs.unlink(), например:

Как видите, в обратном вызове для второго удаления мы разрешаем промис, который в терминах затем разрешается в исходном Promise.all(), который мы вернули в начале функции. Однако мы еще не закончили; нам еще нужно кое-что уладить.

Была одна проблема, которую мне пришлось обойти. Вы видите, что для первых трех значений (подтверждено, умерло и восстановлено) все они объединены в один файл, поэтому исходные файлы можно удалить, но четвертое значение (dailyReport), которое не объединен с основным файлом, поэтому нам нужно сохранить его для некоторых наших запросов.

Однако реализовать это изменение было на самом деле легко, все, что нам нужно было сделать, это запустить оператор if между двумя вызовами fs.unlink() и проверить, является ли отображаемое в настоящее время значение 'dailyReport', и если да, решить обещание и возврат из цикла, если это не то значение, продолжайте как обычно.

После этого все, что нам нужно сделать сейчас, это добавить некоторую базовую обработку ошибок с оператором catch следующим образом:

Во время этого оператора catch мы console.error сообщаем обо всех ошибках, которые мы получаем во время выполнения функции, но также здесь мы также отклоняем любые обещания, если получим ошибку.

В целом этот код не слишком сложен, и я доволен тем, как он получился. Я надеюсь, что вы также нашли это полезным, и если вы это сделали, я был бы признателен, если бы вы поделились этим сообщением с кем-то еще, кто также может найти его полезным.

Если у вас есть какие-либо вопросы, я с удовольствием на них отвечу. Найдите меня в Твиттере @MrConerMurphy.

Чтобы удалить файл в Node.js, можно использовать unlink(путь, обратный вызов) Node FS для асинхронной операции с файлом и unlinkSync(путь) для синхронной операции с файлом.

В этом учебном пособии по Node.js представлено пошаговое руководство по удалению файла с узлом fs и подробными примерами.

Шаги по удалению файла в Node.js

Ниже приведено пошаговое руководство по программному удалению файла в Node.js.

Шаг 1. Включите модуль файловой системы в программу Node.js.

Мы будем использовать функции unlink() и unlinkSync() этого модуля.

Шаг 2. Удалите файл асинхронно с помощью функции unlink(). Синтаксис представлен ниже

При попытке удалить файл функция обратного вызова вызывается с ошибкой (в качестве аргумента), если таковая имеется.

Шаг 3. Чтобы синхронно удалить файл, используйте функцию unlinkSync(). Синтаксис приведен ниже.

где filePath — это строка, представляющая путь к удаляемому файлу.

Пример 1. Асинхронное удаление файла с помощью функции unlink() Node FS

Для этого примера убедитесь, что рядом с программой-примером node.js есть файл с именем «sample.txt».

Создайте следующую программу Node.js, deleteFile.js , чтобы удалить файл с именем sample.txt в Node.js.

удалить файл.js

Откройте терминал или командную строку и запустите эту программу с помощью команды node, как показано ниже.

Вывод

Файл успешно удален.

Пример 2. Синхронное удаление файла с помощью функции unlinkSync() Node FS

Создайте следующую программу Node.js для синхронного удаления файла в Node.js. Это полезно, если операторы рядом с операцией удаления зависят от удаляемого файла. Функция unlinkSync() гарантирует, что файл будет удален (если он существует) перед выполнением последующих инструкций.

удалитьFileSynchronously.js

Откройте терминал или командную строку и запустите эту программу с помощью команды node, как показано ниже.

Вывод

Файл успешно удален.

Пример 3. Файл, указанный для удаления, отсутствует. (Ошибка: ENOENT: нет такого файла или каталога)

Для этого примера убедитесь, что рядом с программой-примером node.js нет файла с именем «sample11.txt». Мы смоделируем ситуацию, когда мы попытались удалить файл, которого нет в этом месте.

удалитьFile2.js

Откройте терминал или командную строку и запустите эту программу с помощью команды node, как показано ниже.

Вывод

Поскольку файл отсутствует, выдается сообщение об ошибке "Нет такого файла или каталога".

Вы не можете удалить файл при запуске JavaScript из браузера, но вы можете сделать это при запуске JavaScript из серверной среды, такой как NodeJS.

Если вам нужно удалить файл с помощью NodeJS, вы можете использовать метод fs.unlink() или fs.unlinkSync(). В этом руководстве показано, как использовать оба метода для удаления файла в NodeJS.

Методы unlink() и unlinkSync() предоставляются модулем fs, что является сокращением от файловой системы. Во-первых, вам нужно импортировать модуль fs с помощью require() следующим образом:

Затем вы можете начать использовать методы для удаления вашего файла. Начнем с изучения метода unlinkSync().

Удалить файл с помощью метода unlinkSync()

Метод unlinkSync() удалит файл синхронно, что означает, что выполнение кода JavaScript будет остановлено до завершения выполнения метода.

Предположим, у вас есть следующая папка проекта JavaScript:

Вы можете удалить файл picture.jpg, используя следующий код JavaScript:

Поместите приведенный выше код в файл index.js, затем запустите файл с помощью команды node index.js.

Приведенный выше код удалит файл picture.jpg и выведет на консоль сообщение об удалении файла.

Код окружен блоком try..catch, поэтому журнал будет напечатан, если файл не может быть удален по какой-либо причине (нет разрешения на удаление, файл не найден и т. д.)

Далее рассмотрим метод unlink().

Удалить файл с помощью метода unlink()

Метод fs.unlink() асинхронно удалит файл в вашей файловой системе, что означает, что выполнение кода JavaScript продолжится, не дожидаясь завершения метода.

  • Строка пути, содержащая путь к файлу, который вы хотите удалить
  • Функция обратного вызова, которая будет выполняться после завершения работы функции. Объект ошибки будет передан этой функции методом.

Например, приведенный ниже код удалит файл picture.jpg из той же папки, из которой вызывается скрипт:

Метод unlink() не нужно заключать в блок try..catch, потому что каждый раз, когда метод сталкивается с ошибкой, эта ошибка будет перехвачена и передана функции обратного вызова, как показано выше.

Вот как вы можете использовать JavaScript для удаления файла. Имейте в виду, что удаление файлов возможно только при использовании JavaScript в серверной среде, такой как NodeJS. Вы не можете удалить файл при запуске JavaScript из браузера.

См. также:

Повысьте уровень своих навыков программирования

Я время от времени рассылаю электронные письма с последними руководствами по программированию. Оставьте свой адрес электронной почты в поле ниже, и я буду присылать новые материалы прямо на ваш почтовый ящик!

О нас

Натан Себхастян – инженер-программист, который любит писать технические руководства. Изучайте JavaScript и другие концепции технологий веб-разработки с помощью простых для понимания объяснений, написанных простым английским языком.

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

Чтобы использовать эти функции, нам нужен модуль fs, как показано ниже

  • Чтение файлов
  • Создать файлы
  • Обновить файлы
  • Удалить файлы
  • Переименовать файлы
  • Создание, удаление и переименование папок
  • Асинхронно: синхронная связь требует обратного ответа, прежде чем переходить к следующей задаче/пользователю, что означает, что после завершения операции будет выполнена только следующая строка кода.
  • Синхронно: асинхронная связь не требует обратного ответа перед переходом к следующей задаче/человеку, выполнение одной строки не остановит выполнение следующей строки, поэтому выполнение будет быстрее.

Чтение файла в Nodejs

Асинхронное чтение файла:

Мы можем прочитать файл асинхронно, используя метод fs.readFile() из модуля fs.

имя файла: полный путь и имя файла в виде строки, это может быть относительный или абсолютный путь.

options: Параметр options может быть объектом или строкой, которая может включать кодировку и флаг. Кодировка по умолчанию — utf8, а флаг по умолчанию — «r».

обратный вызов: функция с двумя параметрами err и fd, которая будет вызвана после завершения операции readFile. Тело функции будет выполнено после чтения файла

Асинхронное чтение файла на nodejs:

Синхронное чтение файла:

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

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

Записать файл в Nodejs

Асинхронная запись файла:

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

имя файла: полный путь и имя файла в виде строки.

options: Параметр options может быть объектом или строкой, которая может включать кодировку и флаг. Кодировка по умолчанию — utf8, а флаг по умолчанию — «r».

обратный вызов: функция с двумя параметрами err и fd. Это будет вызвано, когда операция readFile завершится.

Асинхронная запись файла в node js:

Синхронная запись файла:

writeFileSync() записывает файл синхронно, но блокирует выполнение других строк Запись файла синхронно:

Добавить файл с помощью Nodejs

Асинхронное добавление файла:

функция fs.appendFile() добавляет указанное содержимое в файл, файл будет создан, если файл не существует,

Асинхронное добавление файла с помощью nodejs

Синхронное добавление файла:

Подобно операциям записи и чтения, мы также добавляем файл, используя nodejs с функцией appendFileSync() Синхронное добавление файла

Переименовать файл в Nodejs

Асинхронное переименование файла:

Методы rename() асинхронно переименовывают имя файла

Синхронное переименование файла:

renameSync() синхронно переименовывает файл, блокируя другой код, что означает, что пока переименование не будет завершено, nodejs не будет выполнять следующую строку кода.

Удалить файл в Nodejs

Асинхронное удаление файла:

Используйте метод fs.unlink() для удаления существующего файла из папки

Синхронное удаление файла:

функция unlinkSync() синхронно удаляет файл

Операции с папками в Nodejs

  • Чтобы создать новый каталог, вы можете использовать метод fs.mkdir() или fs.mkdirSync().
  • fs.mkdir(путь[, режим], обратный вызов) : создать новую папку
  • fs.exists(путь, обратный вызов): проверить, существует ли файл или нет
  • Чтобы переименовать каталог с модулем файловой системы, используйте метод fs.rename(oldPath, newPath, callback).

Забавные факты — не совсем

  • fs.readFile(): чтение файла асинхронным способом.
  • fs.readFileSync(): синхронное чтение файла.
  • fs.writeFile(): запись файла асинхронным способом.
  • fs.writeFileSync(): синхронная запись в файл.
  • fs.appendFile(): добавить файл асинхронно.
  • fs.appendFileSync(): добавить файл синхронно.
  • fs.rename() : асинхронное переименование имени файла.
  • fs.renameSync(): переименовать имя файла синхронно.
  • fs.unlink(): удалить файл асинхронно.
  • fs.unlinkSync(): удалить файл синхронно.
Рекомендуемая литература

Я Паванкумар, имею 8,5-летний опыт работы в проекте Video/Live Analytics.

Читайте также: