Функция создания файла является одной из самых основных задач программирования, которую вам необходимо знать на любом языке программирования. В этом случае в Node.js эту задачу действительно легко выполнить.
Основы
Чтобы создать файл с Node.js, мы будем использовать встроенный модуль FileSystem. Для использования этого модуля используйте:
var fileSystem = require('fs');
все методы имеют асинхронную и синхронную формы.
Существует 3 способа создания файла: асинхронный, синхронный и неблокирующий:
Асинхронный
Чтобы создать файл асинхронным способом, используйте следующий фрагмент. Он использует writeFile
метод, этот метод записывает данные в файл, заменяя файл, если он уже существует. Данные могут быть строкой или буфером.
var fs = require('fs');
// Change the content of the file as you want
// or either set fileContent to null to create an empty file
var fileContent = "Hello World!";
// The absolute path of the new file with its name
var filepath = "mynewfile.txt";
fs.writeFile(filepath, fileContent, (err) => {
if (err) throw err;
console.log("The file was succesfully saved!");
});
Или напишите буфер напрямую. В этом случае мы собираемся сохранить изображение файла из строки base64:
var fs = require('fs');
// a base64 string of a gif image
var fileContent = "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";
// The absolute path of the new file with its name
var filepath = "image.gif";
// Save with a buffer as content from a base64 image
fs.writeFile(filepath, new Buffer(fileContent, "base64"), (err) => {
if (err) throw err;
console.log("The file was succesfully saved!");
});
Если вы хотите изменить кодировку вашего файла, укажите его в качестве третьего параметра.
var content = "hello world!";
var encoding = "utf8";
fs.writeFile('myfile.txt', content, encoding, (err) => {
if (err) throw err;
console.log("The file was succesfully saved!");
});
Обратите внимание, что небезопасно использовать fs.writeFile
несколько раз в одном файле без ожидания обратного вызова. Для этого сценария fs.createWriteStream
настоятельно рекомендуется.
Синхронно
Чтобы записать файл синхронно, используйте writeFileSync
метод. Этот метод является синхронной версией fs.writeFile
, Он всегда возвращает неопределенное значение, поэтому используйте блок try и catch для обработки любой ошибки.
var fs = require('fs');
var content = "hello world!";
try{
fs.writeFileSync('myfile.txt', content);
}catch (e){
console.log("Cannot write file ", e);
}
Все данные должны храниться одновременно, это означает, что вы не можете выполнять последовательные записи.
Точно так же, как fs.writeFile
Вы можете сохранить буфер вместо строки и указать кодировку, установив третий параметр.
Неблокирующий способ
Вместо того, чтобы записывать огромный файл с несколькими данными одновременно, вы можете оптимизировать производительность путем реализации потока с возможностью записи. Этот метод удобен, когда вы работаете с огромными текстовыми файлами, такими как файлы журналов.
var fs = require('fs');
var stream = fs.createWriteStream("myfile.txt");
stream.once('open', (fd) => {
stream.write("First line\n");
stream.write("Second line\n");
// Important to close the stream when you're ready
stream.end();
});
WriteStream
будет создан, что очень удобно, потому что вам не нужно ждать какого-либо обратного вызова. Таким же образом writeFile
а также writeFileSync
делает, если второй параметр createWriteStream
является строкой, то она определяет кодировку.