ποΈ 4 Π±Π°Π·ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ Π² Node.js
В Node.js программно манипулировать файлами можно с помощью встроенного модуля fs, содержащего функции, необходимые для чтения, записи, удаления и перемещения файлов на сервере. Рассмотрим эти функции в действии. Обсудить Перед чтением инструкции убедитесь, что у вас уже установлен Node.js. Для работы с файлами используются промисы с синтаксисом Шаг 1. Читаем файлы с помощью readFile() В каждом из следующих примеров мы сначала импортируем модуль Начнем с настройки среды. Создадим папку В этой папке создадим текстовый файл Команда Cоздадим и откроем в текстовом редакторе файл Начнем с импорта внутри файла программы модуля Когда модуль Создадим асинхронную функцию для чтения файла. Такие функции начинаются с ключевого слова Чтобы ловить ошибки асинхронного чтения файлов, заключаем вызов По умолчанию Если обнаружена ошибка (если файл не найден или нет прав на чтение), в консоль выведется соответствующее сообщение. Осталось лишь вызвать функцию. Сохраняем файл программы и выходим из редактора. Запускаем скрипт: Получаем следующий результат: Шаг 2. Запись файлов с помощью writeFile() Создадим другой программный файл В этом примере мы напишем две функции: первая будет создавать CSV-файл, а вторая – добавлять в него данные. Вставим в файл следующий код: Сначала функция Асинхронная функция Затем, как и в функции Для завершения скрипта добавим в конец файла программы следующие строки: Запускаем код: В текущем каталоге будет создан новый файл Содержимое файла Вызов Шаг 3. Удаление файлов с помощью unlink() На этом шаге мы научимся удалять файлы с помощью функции Напишем в программном файле код, создающий асинхронную функцию Обратите внимание Когда вы удаляете файл с помощью функции Сохраняем файл и запускаем код: На выходе получаем следующее: Чтобы убедиться, что файла больше нет, используем команду Шаг 4. Перемещение файлов с помощью rename() Напоследок рассмотрим функцию перемещения. Перед тем как начать, создадим папку Скопируем файл: Откроем для редактирования программный файл: Создадим функцию Функция Сохраним и запустим код: В ответ получаем следующее: Подтвердим успех операции: Заключение Мы изучили функции управления файлами с помощью Node.js. Сначала загрузили содержимое файла функцией С помощью функций модуля fs разработчики могут контролировать использование файлов в программах Node.js. Кстати, у нас есть и другие полезные материалы по теме Node.js:async/await
. Если вы незнакомы с концепцией асинхронного программирования в JavaScript, ознакомьтесь с нашим руководством.fs
– стандартный Node.js модуль для работы с файлами. В первом примере мы воспользуемся функцией readFile()
– прочитаем файл, сохраним содержимое в переменной и выведем результат в консоль.node-files
для хранения проекта:
mkdir node-files cd node-files
greetings.txt
для тестирования работы нашей программы:
echo "hello, hola, bonjour, hallo" > greetings.txt
echo
выводит строковый аргумент в терминал, а символ >
перенаправляет вывод в файл greetings.txt
.readFile.js
. Например, с помощью nano:
nano readFile.js
fs
:
const fs = require('fs').promises;
fs
только создавался, основным способом написания асинхронного кода в Node.js были коллбэки. Но по мере роста популярности промисов, команда Node.js поработала и над их поддержкой в модуле fs
.async
. С помощью функции можно разрешать промисы, используя await
, вместо того чтобы связывать промис с помощью метода .then()
.
const fs = require('fs').promises; async function readFile(filePath) { try { const data = await fs.readFile(filePath); console.log(data.toString()); } catch (error) { console.error(`Got an error trying to read the file: ${error.message}`); } }
fs.readFile()
в блок try...catch
.fs.readFile()
возвращает объект, который может хранить файлы любого типа. Когда журналируется содержимое файла, все байты преобразуются в текст с помощью метода toString()
.
const fs = require('fs').promises; async function readFile(filePath) { try { const data = await fs.readFile(filePath); console.log(data.toString()); } catch (error) { console.error(`Got an error trying to read the file: ${error.message}`); } } readFile('greetings.txt');
node readFile.js
hello, hola, bonjour, hallo
writeFile.js
:
nano writeFile.js
const fs = require('fs').promises; async function openFile() { try { const csvHeaders = 'name,quantity,price' await fs.writeFile('groceries.csv', csvHeaders); } catch (error) { console.error(`Got an error trying to write to a file: ${error.message}`); } }
openFile()
создает переменную csvHeaders
, содержащую заголовки столбцов CSV-файла, а затем использует функцию fs.writeFile()
для создания файла и записи в него данных. Первый аргумент – путь к файлу. Поскольку мы указали только имя, Node.js создаст файл в том же каталоге, в котором мы выполняем код. Второй аргумент – записываемые данные. Создадим еще одну функцию для добавления данных в конец файла:
const fs = require('fs').promises; async function openFile() { try { const csvHeaders = 'name,quantity,price' await fs.writeFile('groceries.csv', csvHeaders); } catch (error) { console.error(`Got an error trying to write to a file: ${error.message}`); } } async function addGroceryItem(name, quantity, price) { try { const csvLine = `n${name},${quantity},${price}` await fs.writeFile('groceries.csv', csvLine, { flag: 'a' }); } catch (error) { console.error(`Got an error trying to write to a file: ${error.message}`); } }
addGroceryItem()
принимает три аргумента: название товара, сумму и цену за единицу. Эти аргументы используются с шаблонным литеральным синтаксисом для формирования переменной csvLine
, записываемой в файл.openFile()
, используется метод writeFile()
, но на этот раз есть третий аргумент: объект JavaScript c ключом flag
и значением 'a'
. Так мы сообщаем Node.js, что данные нужно добавить в конец файла. По умолчанию флаг имеет значение 'w'
, при котором создается новый файл, если он не существует, иначе файл перезаписывается. Вы можете узнать больше о флагах файловой системы в документации Node.js.
(async function () { await openFile(); await addGroceryItem('eggs', 12, 1.50); await addGroceryItem('nutella', 1, 4); })();
node writeFile.js
groceries.csv
.
cat groceries.csv
groceries.csv
следующее:
name,quantity,price eggs,12,1.5 nutella,1,4
openFile()
создал новый файл и добавил заголовки столбцов. Последующие вызовы addGroceryItem()
добавляют две строки с данными.unlink()
модуля fs
и напишем Node.js скрипт для удаления groceries.csv
, созданного на предыдущем шаге. Создадим новый программный файл deleteFile.js
:
nano deleteFile.js
deleteFile()
, которая принимает путь к файлу в качестве аргумента и передает его функции fs.unlink()
, чтобы та удалила файл из файловой системы:
const fs = require('fs').promises; async function deleteFile(filePath) { try { await fs.unlink(filePath); console.log(`Deleted ${filePath}`); } catch (error) { console.error(`Got an error trying to delete the file: ${error.message}`); } } deleteFile('groceries.csv');
unlink()
, он не отправляется в recycle.bin
или корзину, а навсегда удаляется из файловой системы. Это действие необратимо.
node deleteFile.js
Deleted groceries.csv
ls
:
ls deleteFile.js greetings.txt readFile.js writeFile.js
test-data
, в которую будем перемещать файл:
mkdir test-data
cp greetings.txt greetings-2.txt
nano moveFile.js
moveFile()
, вызывающую rename()
. В ней необходимо указать путь к местоположению исходного и целевого файлов.
const fs = require('fs').promises; async function moveFile(source, destination) { try { await fs.rename(source, destination); console.log(`Moved file from ${source} to ${destination}`); } catch (error) { console.error(`Got an error trying to move the file: ${error.message}`); } } moveFile('greetings-2.txt', 'test-data/salutations.txt');
rename()
может переместить файл в другую папку, переименовать файл в текущем каталоге или сделать и то, и другое одновременно, как в нашем коде.
node moveFile.js
Moved file from greetings-2.txt to test-data/salutations.txt
ls deleteFile.js greetings.txt moveFile.js readFile.js test-data writeFile.js
readFile()
. Затем создали новый файл и добавили в него данные с помощью writeFile()
, удалили файл с unlink()
, а затем переместили и переименовали файл посредством rename()
.
- 0 views
- 0 Comment
- ΠΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ - Π ΠΎΡΡΠΈΠΉΡΠΊΠΈΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°ΠΌ ΡΠ°Π·ΡΠ΅ΡΠ°Ρ ΡΡΡΠΎΠΈΡΡ ΡΠ΅ΡΠΈ 5G Π½Π° ΠΎΡΠ΅ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΠΎΠΊΠ° Π½Π΅Ρ
- All Posts
- Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ - π± Π‘ΠΌΠΎΠΆΠ΅Ρ Π»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Data Scientist: ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π΄Π»Ρ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ Π±Π΅Π· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ
Π‘Π²Π΅ΠΆΠΈΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ