परिचय: JavaScript में फ़ाइलों के साथ काम करना क्यों ज़रूरी है?
\n\nजब हम JavaScript की बात करते हैं, तो ज़्यादातर लोगों को ब्राउज़र और इंटरैक्टिव इंटरफ़ेस याद आते हैं। लेकिन Node.js प्लेटफ़ॉर्म के आने के बाद, JavaScript वेब पेजों की सीमाओं से बाहर निकल गया। आज यह सर्वर-साइड डेवलपमेंट, ऑटोमेशन और यूटिलिटीज़ के लिए एक पूर्ण भाषा है। और हर डेवलपर के सामने आने वाला एक मुख्य कार्य है — फ़ाइल सिस्टम के साथ काम करना।
\n\nफ़ाइलों को पढ़ना, लिखना, स्थानांतरित करना और हटाना — यह एक बुनियादी कौशल है, जिसके बिना किसी भी गंभीर प्रोजेक्ट की कल्पना नहीं की जा सकती। चाहे वह लॉगर हो, कॉन्फ़िगरेशन फ़ाइल हो, इमेज अपलोड हो या डेटा एनालिसिस — हर जगह फ़ाइल सिस्टम तक पहुँच चाहिए।
\n\nइस लेख में हम Node.js में फ़ाइल सिस्टम के साथ काम करने के व्यावहारिक उदाहरण देखेंगे। आप सीखेंगे कि बिल्ट-इन fs मॉड्यूल का उपयोग कैसे करें, कौन से मेथड उपलब्ध हैं और सामान्य गलतियों से कैसे बचें। सभी कोड को तुरंत चलाकर टेस्ट किया जा सकता है।
fs मॉड्यूल के मुख्य मेथड
\n\nfs (File System) मॉड्यूल Node.js के स्टैंडर्ड इंस्टॉलेशन में शामिल है। इसे अलग से इंस्टॉल करने की ज़रूरत नहीं है। शुरू करने के लिए, बस इसे अपनी फ़ाइल की शुरुआत में शामिल करें:
const fs = require('fs');\nconst fsPromises = require('fs').promises; // प्रॉमिस के साथ काम करने के लिए\n\nfs मॉड्यूल के सभी मेथड तीन रूपों में उपलब्ध हैं:
- \n
- सिंक्रोनस — कोड के निष्पादन को तब तक रोकते हैं जब तक ऑपरेशन पूरा न हो जाए। इनमें आमतौर पर
Syncसफ़िक्स होता है। \n - कॉलबैक के साथ एसिंक्रोनस — Node.js की क्लासिक शैली। \n
- प्रॉमिस पर आधारित एसिंक्रोनस —
fs.promisesके माध्यम से आधुनिक दृष्टिकोण। \n
आधुनिक प्रोजेक्ट्स में प्रॉमिस और async/await का उपयोग करने की सलाह दी जाती है। इससे कोड साफ और समझने में आसान होता है।
फ़ाइलें पढ़ना
\n\nसबसे आम परिदृश्य — किसी फ़ाइल की सामग्री पढ़ना। आइए data.txt टेक्स्ट फ़ाइल का उदाहरण देखें:
const fs = require('fs').promises;\n\nasync function readFileExample() {\n try {\n const data = await fs.readFile('data.txt', 'utf8');\n console.log('फ़ाइल की सामग्री:');\n console.log(data);\n } catch (err) {\n console.error('फ़ाइल पढ़ने में त्रुटि:', err.message);\n }\n}\n\nreadFileExample();\n\nदूसरा पैरामीटर 'utf8' एन्कोडिंग को निर्दिष्ट करता है। अगर इसे छोड़ दिया जाए, तो आपको रॉ बफर (Buffer) मिलेगा। टेक्स्ट फ़ाइलों के लिए हमेशा एन्कोडिंग निर्दिष्ट करें।
फ़ाइल में लिखना
\n\nफ़ाइल में डेटा लिखना दो तरीकों से किया जा सकता है: पूरी तरह से ओवरराइट करना या अंत में जोड़ना।
\n\nफ़ाइल को ओवरराइट करना:
\nconst fs = require('fs').promises;\n\nasync function writeFileExample() {\n try {\n await fs.writeFile('output.txt', 'नमस्ते, फ़ाइल सिस्टम!');\n console.log('फ़ाइल सफलतापूर्वक लिखी गई');\n } catch (err) {\n console.error('लिखने में त्रुटि:', err.message);\n }\n}\n\nwriteFileExample();\n\nफ़ाइल के अंत में जोड़ना:
\nconst fs = require('fs').promises;\n\nasync function appendFileExample() {\n try {\n await fs.appendFile('log.txt', `नई प्रविष्टि: ${new Date().toISOString()}\\n`);\n console.log('डेटा जोड़ दिया गया');\n } catch (err) {\n console.error('जोड़ने में त्रुटि:', err.message);\n }\n}\n\nappendFileExample();\n\nappendFile मेथड लॉग रखने या डेटा जमा करने के लिए एकदम सही है।
डायरेक्टरी और फ़ाइलों का प्रबंधन
\n\nफ़ाइल सिस्टम के साथ काम करना सिर्फ़ पढ़ने और लिखने तक सीमित नहीं है। अक्सर फ़ोल्डर बनाना, फ़ाइलों के अस्तित्व की जाँच करना या उन्हें हटाना आवश्यक होता है।
\n\nडायरेक्टरी बनाना और हटाना
\n\nconst fs = require('fs').promises;\n\nasync function manageDirectories() {\n try {\n // डायरेक्टरी बनाना (अगर मौजूद नहीं है)\n await fs.mk