Kodokon kodokon.com

फ़ाइल सिस्टम: fs/promises से पढ़ना और लिखना

आप fs/promises मॉड्यूल से फ़ाइलें पढ़ते और लिखते हैं और path मॉड्यूल की बदौलत विश्वसनीय पथ बनाते हैं।

8 मिनट · 3 प्रश्न

इस पाठ को Kodokon में खोलें

ब्राउज़र में, JavaScript को आपकी डिस्क की फ़ाइलों को छूने की अनुमति नहीं है: यह सुरक्षा का मामला है। दूसरी ओर, Node सीधे आपकी मशीन पर चलता है और fs मॉड्यूल (file system) की बदौलत फ़ाइलें पढ़ और लिख सकता है। हम इसका आधुनिक संस्करण, fs/promises उपयोग करेंगे, जिसका हर फ़ंक्शन एक प्रॉमिस लौटाता है - आप उन्हें await से प्रतीक्षा करना पहले से जानते हैं, जो JavaScript ट्रैक में देखा गया। imports में node: उपसर्ग पर ध्यान दें: यह स्पष्ट करता है कि मॉड्यूल Node से ही आता है, node_modules से नहीं। और अच्छी खबर: किसी ES मॉड्यूल में, await किसी घेरने वाले फ़ंक्शन के बिना, सीधे फ़ाइल स्तर पर काम करता है।

JAVASCRIPT
import { writeFile } from "node:fs/promises";

await writeFile("notes.txt", "First note\n");
console.log("File created!");
writeFile यदि notes.txt फ़ाइल मौजूद न हो तो उसे बनाता है, दूसरे पैरामीटर के रूप में दिए गए टेक्स्ट के साथ।

पढ़ने के लिए, readFile के साथ वही तर्क। इसका दूसरा पैरामीटर आवश्यक है: utf8 एन्कोडिंग को दर्शाता है, यानी डिस्क पर संग्रहीत बाइट्स को पठनीय टेक्स्ट में बदलने का तरीका। यदि आप इसे छोड़ देते हैं, तो Node किसी स्ट्रिंग के बजाय एक Buffer ऑब्जेक्ट - कच्चे बाइट्स - लौटाता है।

JAVASCRIPT
import { readFile } from "node:fs/promises";

const text = await readFile("notes.txt", "utf8");
console.log(text);
फ़ाइल की सामग्री एक स्ट्रिंग के रूप में आती है, संभालने के लिए तैयार।

आइए पथ (paths) की बात करें। एक सापेक्ष (relative) पथ (notes.txt, data/log.txt) वर्तमान फ़ोल्डर से शुरू होता है; एक निरपेक्ष (absolute) पथ (C:\... या /home/...) डिस्क की जड़ से शुरू होता है। एक क्लासिक जाल: Windows फ़ोल्डरों को \ से अलग करता है, macOS और Linux / से। path मॉड्यूल इस समस्या को हल करता है: path.join सिस्टम चाहे जो भी हो, सही विभाजक के साथ टुकड़ों को जोड़ देता है। आइए इसे mkdir के साथ जोड़ें, जो एक फ़ोल्डर बनाता है।

JAVASCRIPT
import path from "node:path";
import { mkdir, writeFile } from "node:fs/promises";

const file = path.join("data", "log.txt");

await mkdir("data", { recursive: true });
await writeFile(file, "First log\n");
console.log("Written to:", file);
recursive विकल्प data फ़ोल्डर के पहले से मौजूद होने पर एक त्रुटि से बचाता है।

ज्ञान जांच

सुनिश्चित करें कि आपको इस पाठ के मुख्य बिंदु याद हैं।

  1. यदि आप दूसरे utf8 पैरामीटर को छोड़ देते हैं तो readFile क्या लौटाता है?
    • एक खाली स्ट्रिंग
    • एक त्रुटि: एन्कोडिंग अनिवार्य है
    • एक Buffer, यानी फ़ाइल के कच्चे बाइट्स
  2. यदि लक्ष्य फ़ाइल पहले से मौजूद है तो writeFile क्या करता है?
    • यह सभी मौजूदा सामग्री को नए टेक्स्ट से बदल देता है
    • यह नए टेक्स्ट को फ़ाइल के अंत में जोड़ता है
    • यह लिखने से इनकार करता है और एक त्रुटि फेंकता है
    • यह स्वचालित रूप से एक बैकअप प्रति बनाता है
  3. पथ बनाने के लिए path.join का क्या लाभ है?
    • यह पथ के गायब फ़ोल्डरों को बनाता है
    • यह सिस्टम के लिए सही विभाजक के साथ टुकड़ों को जोड़ता है
    • यह आगे बढ़ने से पहले जाँचता है कि फ़ाइल मौजूद है