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

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

Использование записи в файл()

записать файл () возможно, это самый простой метод, который вы можете использовать для записи файла в Node.

fs.writeFile (имя файла, данные, обратный вызов)

Вот пример, показывающий, как создать обычный текстовый файл с помощью writeFile(). Вы, конечно, можете создать другие типы файлов, такие как CSV или JSON.

константа фс = требовать("фс")

fs.writeFile("test.txt", "Новый контент", err => {
если (ошибка) {
приставка.лог (ошибка)
}
});

writeFile() поддерживает async/await do вместо использования обратных вызовов, как в приведенном выше примере, вы можете создать файл следующим образом.

константа
instagram viewer
фс = требовать("фс").обещания

асинхронныйфункцияwriteToFile() {
пытаться {
Ждите fs.writeFile("test.txt", "Новое продолжение")
} ловить (ошибка) {
приставка.log (ошибка);
}
}

написать в файл ()

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

  • г+ - открывает файл для чтения и записи.
  • ж+ - открывает файл для чтения и записи в начале файла
  • а - открывает файл для записи в конец файла.
  • + - открывает файл для чтения и записи в конец файла.

Например, вы можете использовать флаг a+ следующим образом:

константа фс = требовать("фс")

fs.writeFile("test.txt", "Новый контент", { флаг: "а+" }, ошибка => {
если (ошибка) {
приставка.лог (ошибка)
}
});

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

фс модуль также обеспечивает записьFileSync, синхронная версия записи в файл().

константа фс = требовать("фс")

fs.writeFileSync("test.txt", "Новый контент", { флаг: "а+" }, ошибка => {
если (ошибка) {
приставка.лог (ошибка)
}
});

Использование createWriteStream()

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

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

Код ниже записывает данные в текстовый файл, используя потоки

константа фс = требовать("фс")

// создаем поток с возможностью записи
позволять записываемыйпоток = fs.createWriteStream("test.txt")

// Запись в файл с помощью доступного для записи потока
writeableStream.write("Новый контент");

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

константа фс = требовать("фс")
позволять записываемыйпоток = fs.createWriteStream("test.txt");
process.stdin.pipe (поток с возможностью записи);

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

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

константа фс = требовать("фс")
позволять readableStream = fs.createReadStream("test.txt");
позволять записываемыйпоток = fs.createWriteStream("test2.txt");

readableStream.on("данные", функция(кусок) {
writableStream.write (чанк);
});

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

Использование appendFile()

добавить файл() — это простой метод добавления контента в конец файла. Вот пример.

константа фс = требовать("фс")

fs.appendFile("test.txt", "добавлено содержимое", err => {
если (ошибка) {
приставка.ошибка (ошибка);
}
});

Вы также можете использовать async/await.

константа фс = требовать("фс").обещания

асинхронныйфункцияапендтофиле() {
пытаться {
Ждите fs.appendFile("test.txt", "добавленное содержимое")
} ловить (ошибка) {
приставка.log (ошибка);
}
}

добавить к файлу ()

Нравиться записать файл (), appendFile также имеет синхронную версию:

fs.appendFileSync("test.txt", "добавленное содержимое");

Используйте потоки для записи больших файлов

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