Իմացեք, թե ինչպես գրել ֆայլեր 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()-ը շատ պարզ է, այն ավելի հարմար է փոքր ֆայլերի չափերի համար, քանի որ այն թույլ չի տալիս հաջորդական գրել: Եթե գործ ունեք մեծ ֆայլերի հետ, ապա ավելի լավ է օգտագործել գրավոր հոսքեր։