Node предоставляет различные варианты записи файлов в вашей системе через встроенный фс модуль. Это включает записать файл (), добавить файл(), а также создать поток записи ().
Как и многие языки, Node.js позволяет выбирать между перезаписью существующего файла или добавлением к нему. Вы также должны узнать о компромиссах между записью файла за один раз и его потоковой передачей.
Использование записи в файл()
записать файл () возможно, это самый простой метод, который вы можете использовать для записи файла в Node.
fs.writeFile (имя файла, данные, обратный вызов)
Вот пример, показывающий, как создать обычный текстовый файл с помощью writeFile(). Вы, конечно, можете создать другие типы файлов, такие как CSV или JSON.
константа фс = требовать("фс")
fs.writeFile("test.txt", "Новый контент", err => {
если (ошибка) {
приставка.лог (ошибка)
}
});
writeFile() поддерживает async/await do вместо использования обратных вызовов, как в приведенном выше примере, вы можете создать файл следующим образом.
константа фс = требовать("фс").обещания
асинхронныйфункция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() очень проста, она лучше подходит для файлов небольшого размера, поскольку не допускает последовательной записи. Если вы имеете дело с большими файлами, лучше использовать доступные для записи потоки.