Իմացեք, թե ինչպես գրել ֆայլեր Node-ում
Իմացեք Node-ի հիանալի աջակցության մասին՝ JavaScript-ի միջոցով ֆայլային համակարգում գրելու համար:
Node-ը տրամադրում է ձեր համակարգի ֆայլեր գրելու տարբեր տարբերակներ ներկառուցված fs մոդուլի միջոցով: Դրանք ներառում են writeFile(), appendFile() և createWriteStream():
Ինչպես շատ լեզուներ, Node.js-ը թույլ է տալիս ընտրել գոյություն ունեցող ֆայլը վերագրանցելու կամ դրան կցելու միջև: Դուք նաև պետք է իմանաք ֆայլը միանգամից գրելու և այն հեռարձակելու փոխզիջումների մասին:
Օգտագործելով writeFile()
writeFile()-ը թերեւս ամենահեշտ մեթոդն է, որը կարող եք օգտագործել Node-ում ֆայլ գրելու համար:
fs.writeFile(filename, data, callback)
Ահա մի օրինակ, որը ցույց է տալիս, թե ինչպես ստեղծել պարզ տեքստային ֆայլ՝ օգտագործելով writeFile(): Դուք, իհարկե, կարող եք ստեղծել այլ ֆայլերի տեսակներ, ինչպիսիք են CSV կամ JSON:
const fs = require("fs")
fs.writeFile("test.txt", "New content", err => {
if (err) {
console.log(err)
}
});
writeFile()-ն աջակցում է async/wait do-ին, փոխարենը հետադարձ զանգեր օգտագործելու, ինչպես վերը նշված օրինակում, կարող եք ֆայլը ստեղծել հետևյալ կերպ.
const fs = require("fs").promises
async function writeToFile() {
try {
await fs.writeFile("test.txt", "New cont")
} catch (err) {
console.log(err);
}
}
writeToFile()
Լռելյայնորեն, writeFile()-ն աշխատում է նշված ֆայլի բովանդակությունը փոխարինելով նոր բովանդակությամբ, եթե ֆայլը գոյություն ունի: Այնուամենայնիվ, կան դրոշներ, որոնք կարող եք օգտագործել այս գործառույթը անտեսելու համար, ինչպիսիք են՝
- r+ - բացում է ֆայլը կարդալու և գրելու համար:
- w+ - բացում է ֆայլը՝ ֆայլի սկզբում կարդալու և գրելու համար
- a - բացում է ֆայլը՝ ֆայլի վերջում գրելու համար:
- a+ - բացում է ֆայլը՝ ֆայլի վերջում կարդալու և գրելու համար:
Օրինակ, դուք կարող եք օգտագործել a+ դրոշը այսպես.
const fs = require("fs")
fs.writeFile("test.txt", "Newer content", { flag: "a+" }, err => {
if (err) {
console.log(err)
}
});
Կան բազմաթիվ այլ ֆայլային համակարգի դրոշներ, որոնց մասին կարող եք ծանոթանալ fs մոդուլի Node փաստաթղթերում:
fs մոդուլը տրամադրում է նաև writeFileSync՝ writeFile(-ի) համաժամանակյա տարբերակը։
const fs = require("fs")
fs.writeFileSync("test.txt", "Newer content", { flag: "a+" }, err => {
if (err) {
console.log(err)
}
});
Օգտագործելով createWriteStream()
writeFile()-ի օգտագործման բացասական կողմն այն է, որ դուք պետք է միանգամից պահեք ֆայլի բոլոր բովանդակությունը, որը լայնածավալ չէ մեծ ֆայլերի համար: createWriteStream() այնուամենայնիվ, աջակցում է հաջորդական գրելուն: Սա նշանակում է, որ դուք կարող եք միաժամանակ գրել տվյալների մեկ կտոր ֆայլում: Ահա գրավոր հոսք ստեղծելու ընդհանուր համակարգը։
fs.createWriteStream(path, options)
Ստորև բերված կոդը գրում է տվյալներ տեքստային ֆայլում՝ օգտագործելով հոսքերը
const fs = require("fs")
// create a writable stream
let writeableStream = fs.createWriteStream("test.txt")
// Write to the file using the writable stream
writeableStream.write("New content");
Ահա ևս մեկ օրինակ, որը ցույց է տալիս, թե ինչպես կարող եք տվյալները փոխանցել գրավոր հոսքին: Այս ծրագիրը գրում է բոլոր մուտքերը տերմինալից դեպի test.txt ֆայլ, քանի դեռ տերմինալը բաց է:
const fs = require("fs")
let writableStream = fs.createWriteStream("test.txt");
process.stdin.pipe(writableStream);
Եթե այս ծրագիրը գործարկում եք հրամանի տողից, կարող եք դուրս գալ այն Ctrl + d կամ Ctrl + c-ով:
Կարող եք նաև գրել մեկ այլ ֆայլից գրվող հոսքի մեջ: Դիտարկենք հետևյալ օրինակը.
const fs = require("fs")
let readableStream = fs.createReadStream("test.txt");
let writableStream = fs.createWriteStream("test2.txt");
readableStream.on("data", function(chunk) {
writableStream.write(chunk);
});
Ֆայլի ընթեռնելի հոսքի ստեղծումը, որը ցանկանում եք պատճենել, թույլ է տալիս կարդալ դրա բովանդակությունը կտորներով: Այսպիսով, ստացված յուրաքանչյուր կտորի համար ծրագիրը կգրի նպատակակետ ֆայլին:
Օգտագործելով appendFile()
appendFile()-ը ֆայլի վերջում բովանդակություն ավելացնելու պարզ մեթոդ է: Ահա մի օրինակ.
const fs = require("fs")
fs.appendFile("test.txt", "added content", err => {
if (err) {
console.error(err);
}
});
Կարող եք նաև օգտագործել async/wait:
const fs = require("fs").promises
async function appendToFile() {
try {
await fs.appendFile("test.txt", "added content")
} catch (err) {
console.log(err);
}
}
appendToFile()
Ինչպես writeFile()-ը, appendFile-ն ունի նաև համաժամանակյա տարբերակ.
fs.appendFileSync("test.txt", "added content");
Օգտագործեք հոսքերը մեծ ֆայլեր գրելու համար
Այս հոդվածում քննարկվեցին Node-ում ֆայլեր գրելու մի քանի մոտեցումներ: Թեև writeFile()-ը շատ պարզ է, այն ավելի հարմար է փոքր ֆայլերի չափերի համար, քանի որ այն թույլ չի տալիս հաջորդական գրել: Եթե գործ ունեք մեծ ֆայլերի հետ, ապա ավելի լավ է օգտագործել գրավոր հոսքեր։