Node предоставя различни опции за запис във файлове във вашата система чрез вградените fs модул. Те включват напиши файл(), appendFile(), и createWriteStream().

Подобно на много езици, Node.js ви позволява да избирате между презаписване на съществуващ файл или добавяне към него. Трябва също да научите за компромисите между писането на файл наведнъж и стриймингът му.

Използване на writeFile()

напиши файл() е може би най-лесният метод, който можете да използвате, за да напишете файл в Node.

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

Ето пример, показващ как да създадете обикновен текстов файл с помощта на writeFile(). Разбира се, можете да създавате други типове файлове като CSV или JSON.

const fs = изискват("fs")

fs.writeFile("test.txt", "Ново съдържание", err => {
ако (грешка) {
конзола.log (грешка)
}
});

writeFile() поддържа async/await do вместо да използвате обратни извиквания, както в примера по-горе, можете да създадете файла, както следва.

const fs = изискват("fs").обещания

асинхронно

instagram viewer
функциянапиши във файл() {
опитвам {
чакам fs.writeFile("test.txt", "Ново продължение")
} улов (грешка) {
конзола.log (грешка);
}
}

напиши във файл()

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

  • r+ - отваря файла за четене и запис.
  • w+ - отваря файла за четене и запис в началото на файла
  • а - отваря файла за запис в края на файла.
  • а+ - отваря файла за четене и запис в края на файла.

Например, можете да използвате флага a+ по следния начин:

const fs = изискват("fs")

fs.writeFile("test.txt", "По-ново съдържание", { флаг: "a+" }, err => {
ако (грешка) {
конзола.log (грешка)
}
});

Има много други флагове на файловата система, за които можете да научите в Документация на възел за модула fs.

В fs модулът също така осигурява writeFileSync, на синхронна версия на writeFile().

const fs = изискват("fs")

fs.writeFileSync("test.txt", "По-ново съдържание", { флаг: "a+" }, err => {
ако (грешка) {
конзола.log (грешка)
}
});

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

Недостатъкът на използването напиши файл() е, че трябва да съхранявате цялото съдържание на файла наведнъж, което не е мащабируемо за големи файлове. createWriteStream() обаче поддържа последователно писане. Това означава, че можете да записвате една част от данни във файл наведнъж. Ето общата система за създаване на записващ поток.

fs.createWriteStream (път, опции)

Кодът по-долу записва данни в текстов файл с помощта на потоци

const fs = изискват("fs")

// създаване на поток за запис
позволявам writeableStream = fs.createWriteStream("test.txt")

// Записване във файла с помощта на поток за запис
writeableStream.write("Ново съдържание");

Ето още един пример, показващ как можете да предавате данни към потока за запис. Тази програма записва целия вход от терминала във файла test.txt, докато терминалът е отворен.

const fs = изискват("fs")
позволявам writableStream = fs.createWriteStream("test.txt");
process.stdin.pipe (writableStream);

Ако стартирате тази програма от командния ред, можете да я излезете с Ctrl + d или Ctrl + c.

Можете също да пишете от друг файл в потока за запис. Помислете за следния пример:

const fs = изискват("fs")
позволявам readableStream = fs.createReadStream("test.txt");
позволявам writableStream = fs.createWriteStream("test2.txt");

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

Създаването на четим поток от файла, който искате да копирате, ви позволява да четете съдържанието му на парчета. Така за всяка получена част, програмата ще запише в целевия файл.

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

appendFile() е лесен метод за добавяне на съдържание в края на файла. Ето един пример.

const fs = изискват("fs")

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

Можете също да използвате async/await.

const fs = изискват("fs").обещания

асинхроннофункцияappendToFile() {
опитвам {
чакам fs.appendFile("test.txt", "добавено съдържание")
} улов (грешка) {
конзола.log (грешка);
}
}

appendToFile()

като напиши файл(), appendFile също има синхронна версия:

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

Използвайте потоци за писане на големи файлове

Тази статия обсъди няколко подхода за писане на файлове в Node. Докато writeFile() е много ясен, той е по-подходящ за малки размери на файлове, тъй като не позволява последователно записване. Ако имате работа с големи файлове, по-добре е да използвате потоци за запис.