Swift सिर्फ UI के लिए नहीं, बल्कि फ़ाइलों के लिए भी क्यों है
\n\nजब डेवलपर्स Swift सीखना शुरू करते हैं, तो वे अक्सर इंटरफ़ेस, एनिमेशन और नेटवर्क अनुरोधों वाले ऐप लिखते हैं। लेकिन देर-सबेर एक कार्य आता है: डिवाइस पर डेटा सेव करना, कॉन्फ़िग पढ़ना, JSON फ़ाइल पार्स करना या बस एक दस्तावेज़ कॉपी करना। और यहाँ कई लोग भ्रमित हो जाते हैं। जबकि ऐसा नहीं होना चाहिए — Swift में फ़ाइलों के साथ काम करना इतना सुंदर और सुविचारित है कि इसके बाद दूसरी भाषाओं में वापस जाने का मन नहीं करता।
\n\nइस लेख में हम Swift में फ़ाइल सिस्टम के साथ इंटरैक्शन को सरल से जटिल तक समझेंगे। आप सीखेंगे कि फ़ाइलें कैसे बनाएँ, पढ़ें, लिखें और हटाएँ, निर्देशिकाओं के साथ कैसे काम करें, त्रुटियों को कैसे संभालें और डेटा को एन्क्रिप्ट भी करें। चलिए शुरू करते हैं!
\n\nमूल बातें: FileManager और FileHandle
\n\nSwift में फ़ाइल सिस्टम का हृदय क्लास FileManager है। यह एक 'डिस्पैचर' है जो डिवाइस पर फ़ोल्डर्स और फ़ाइलों के बारे में सब कुछ जानता है। यह अस्तित्व की जाँच करने, स्थानांतरित करने, कॉपी करने और ऑब्जेक्ट्स को हटाने की अनुमति देता है। फ़ाइलों की सामग्री (पढ़ना और लिखना) के साथ काम करने के लिए FileHandle या उच्च-स्तरीय विधियों Data, String और Codable का उपयोग किया जाता है।
फ़ाइलें कहाँ संग्रहीत करें? पथ और निर्देशिकाएँ
\n\nकोड लिखने से पहले, यह समझना आवश्यक है कि हमें डेटा कहाँ सहेजने का अधिकार है। iOS और macOS में सख्त नियम हैं: ऐप केवल अपने सैंडबॉक्स (sandbox) में लिख सकता है। सबसे लोकप्रिय निर्देशिकाएँ:
\n\n- \n
- Documents — उपयोगकर्ता डेटा के लिए जो बैकअप में सहेजा जाना चाहिए। \n
- Library/Caches — अस्थायी फ़ाइलों के लिए जिन्हें सिस्टम हटा सकता है। \n
- tmp — एक बार उपयोग की फ़ाइलों के लिए, रीबूट करने पर हटा दी जाती है। \n
आवश्यक फ़ोल्डर का पथ प्राप्त करना बहुत आसान है:
\n\nimport Foundation\n\nlet fileManager = FileManager.default\nlet documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first!\nprint("Documents: \\(documentsURL.path)")\n\nlet cachesURL = fileManager.urls(for: .cachesDirectory, in: .userDomainMask).first!\nprint("Caches: \\(cachesURL.path)")\n\nSwift में फ़ाइलें बनाना और हटाना
\n\nसबसे बुनियादी से शुरू करते हैं — Documents निर्देशिका में एक खाली फ़ाइल बनाएँ:
\n\nlet fileURL = documentsURL.appendingPathComponent("myFile.txt")\n\n// फ़ाइल बनाएँ यदि वह मौजूद नहीं है\nif !fileManager.fileExists(atPath: fileURL.path) {\n fileManager.createFile(atPath: fileURL.path, contents: nil, attributes: nil)\n print("फ़ाइल बन गई!")\n}\n\nध्यान दें: createFile(atPath:contents:attributes:) एक Bool लौटाता है जो बताता है कि फ़ाइल बनाने में सफलता मिली या नहीं। हमेशा परिणाम की जाँच करें — यह अप्रत्याशित त्रुटियों से बचाएगा।
फ़ाइल हटाना एक पंक्ति में किया जाता है:
\n\ndo {\n try fileManager.removeItem(at: fileURL)\n print("फ़ाइल हटा दी गई")\n} catch {\n print("हटाने में त्रुटि: \\(error.localizedDescription)")\n}\n\nयहाँ हम try और do-catch ब्लॉक का उपयोग करते हैं — Swift में त्रुटियों को संभालने का मानक तरीका। बिना जाँच के कभी भी removeItem को कॉल न करें, अन्यथा ऐप क्रैश हो जाएगा।
टेक्स्ट फ़ाइलें पढ़ना और लिखना
\n\nसबसे सामान्य परिदृश्य — टेक्स्ट डेटा के साथ काम करना। Swift Swift फ़ाइल पढ़ने और स्ट्रिंग्स के माध्यम से लिखने के लिए सुविधाजनक विधियाँ प्रदान करता है:
\n\n// टेक्स्ट लिखना\nlet text = "नमस्ते, दुनिया! Hello, Swift!"\ndo {\n try text.write(to: fileURL, atomically: true, encoding: .utf8)\n print("टेक्स्ट लिखा गया")\n} catch {\n print("लिखने में त्रुटि: \\(error)")\n}\n\n// टेक्स्ट पढ़ना\ndo {\n let savedText = try String(contentsOf: fileURL, encoding: .utf8)\n print("पढ़ा गया: \\(savedText)")\n} catch {\n print("पढ़ने में त्रुटि: \\(error)")\n}\n\nफ़्लैग atomically: true गारंटी देता है कि लिखना परमाणु होगा — पहले डेटा लिखा जाता है