Как создать файл с помощью модуля файловой системы (fs) в Node.js

Функция создания файла является одной из самых основных задач программирования, которую вам необходимо знать на любом языке программирования. В этом случае в 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 является строкой, то она определяет кодировку.

Ссылка на основную публикацию
Adblock
detector