एप्लिकेशन दस्तावेज़ निर्देशिका उपयोगकर्ता फ़ाइलों का स्थायी भंडारण है जो सत्रों के बीच बनी रहनी चाहिए और बैकअप से पुनर्स्थापित की जा सकनी चाहिए। Apple File System Programming Guide, 2026 के अनुसार, iOS पर Documents निर्देशिका स्वचालित रूप से iCloud बैकअप में शामिल होती है, कैश और अस्थायी निर्देशिकाओं के विपरीत। दस्तावेज़ निर्देशिका का सही उपयोग सुनिश्चित करता है कि ऐप अपडेट या पुनर्स्थापना के दौरान उपयोगकर्ता फ़ाइलें खो न जाएँ।
मुख्य बिंदु
context.filesDir मैन्युअल बैकअप प्रबंधन के साथदस्तावेज़ निर्देशिका एप्लिकेशन सैंडबॉक्स के अंदर एक विशेष भंडारण है, जो उपयोगकर्ता फ़ाइलों के स्थायी भंडारण के लिए डिज़ाइन किया गया है। कैश के विपरीत, इस निर्देशिका में फ़ाइलें उपयोगकर्ता के लिए महत्वपूर्ण मानी जाती हैं: स्थान कम होने पर सिस्टम उन्हें हटाता नहीं है, ऐप अपडेट के दौरान संरक्षित रहती हैं, और डिवाइस सिंक्रोनाइज़ेशन के दौरान बैकअप होती हैं। iOS पर, Documents निर्देशिका Sandbox कंटेनर का हिस्सा है और स्वचालित रूप से iCloud बैकअप में शामिल होती है। Android पर, कोई सीधा समतुल्य नहीं है — समतुल्य है context.filesDir, जो स्थायी फ़ाइलों के लिए भी है लेकिन इसमें कोई अंतर्निहित बैकअप तंत्र नहीं है।
Android पर दस्तावेज़ निर्देशिका और आंतरिक भंडारण (Internal Storage) के बीच अंतर न्यूनतम है: दोनों ऐप सैंडबॉक्स में स्थित हैं, दोनों अनइंस्टॉल करने पर हटा दिए जाते हैं, दोनों अन्य ऐप्स के लिए अगम्य हैं। मुख्य अंतर शब्दार्थिक है: Documents Directory मानती है कि फ़ाइलें उपयोगकर्ता द्वारा बनाई या आयात की गई हैं, जबकि Internal Storage में ऐप की आंतरिक फ़ाइलें (डेटाबेस, कॉन्फ़िगरेशन) हो सकती हैं। iOS पर, अंतर अधिक महत्वपूर्ण है: Documents स्वचालित रूप से बैकअप होता है, जबकि Library/Application Support नहीं होता। यह भंडारण रणनीति को प्रभावित करता है: Documents में केवल वही रखें जो उपयोगकर्ता नए डिवाइस पर पुनर्स्थापित करना चाहेगा, और Application Support में वह आंतरिक डेटा रखें जिसे ऐप पुनः बना सकता है।
सैंडबॉक्स आर्किटेक्चर सुनिश्चित करता है कि अन्य एप्लिकेशन आपके ऐप की दस्तावेज़ निर्देशिका तक नहीं पहुँच सकते। iOS पर, जेलब्रेक के बिना अन्य ऐप्स के Documents तक पहुँच असंभव है। Android पर, रूट एक्सेस किसी भी ऐप के filesDir को पढ़ने की अनुमति देता है, इसलिए संवेदनशील डेटा (टोकन, एन्क्रिप्शन कुंजियाँ) को EncryptedSharedPreferences या AndroidX Security लाइब्रेरी से EncryptedFile का उपयोग करके अतिरिक्त रूप से संरक्षित किया जाना चाहिए।
दस्तावेज़ निर्देशिका में डेटा संग्रहीत किया जाना चाहिए जो उपयोगकर्ता के लिए मूल्यवान है और ऐप पुनरारंभ या डिवाइस पुनर्स्थापना के बाद सुलभ होना चाहिए। सभी फ़ाइलें इस निर्देशिका में भंडारण के लिए उपयुक्त नहीं हैं — चुनाव डेटा प्रकार और उपयोग परिदृश्य पर निर्भर करता है।
उपयोगकर्ता फ़ाइलें दस्तावेज़ निर्देशिका की मुख्य सामग्री हैं। ये किसी एडिटर में बनाए गए टेक्स्ट दस्तावेज़, ऐप कैमरे से ली गई छवियाँ, निर्यात की गई PDF रिपोर्ट, ऑडियो रिकॉर्डिंग, नोट्स हो सकते हैं। ऐसी प्रत्येक फ़ाइल उपयोगकर्ता द्वारा या उसके अनुरोध पर बनाई गई है और किसी भी समय सुलभ होनी चाहिए। iOS पर, Documents की फ़ाइलें सिस्टम Files ऐप में प्रदर्शित होती हैं, जिससे उपयोगकर्ता मानक फ़ाइल प्रबंधक के माध्यम से उन्हें प्रबंधित कर सकता है। Android पर, कोई समान प्रदर्शन नहीं है — ऐप को स्वयं सहेजी गई फ़ाइलों को देखने के लिए एक इंटरफ़ेस प्रदान करना चाहिए।
SQLite डेटाबेस और सेटिंग्स फ़ाइलें आमतौर पर दस्तावेज़ निर्देशिका के पास संग्रहीत की जाती हैं लेकिन उसके अंदर नहीं। iOS पर, डेटाबेस Library/Application Support में रखे जाते हैं, क्योंकि उन्हें Files ऐप में प्रदर्शित नहीं होना चाहिए और अलग से बैकअप नहीं होना चाहिए। Android पर, डेटाबेस डिफ़ॉल्ट रूप से /data/data/<package>/databases/ में Room या SQLiteOpenHelper के माध्यम से बनाए जाते हैं। यदि डेटाबेस में उपयोगकर्ता सामग्री (नोट्स, डायरी, वित्तीय रिकॉर्ड) है, तो इसे सिस्टम बैकअप सुनिश्चित करने के लिए filesDir में रखा जा सकता है। Room आपको RoomDatabase.Builder कॉलबैक के माध्यम से डेटाबेस भंडारण के लिए एक कस्टम निर्देशिका निर्दिष्ट करने की अनुमति देता है।
val dbFile = File(context.filesDir, "user_database.db")
val db = Room.databaseBuilder<AppDatabase>(
context,
dbFile.absolutePath
).build()
वे फ़ाइलें जिन्हें उपयोगकर्ता अन्य ऐप्स से आयात करता है या आपके ऐप से निर्यात करता है, उन्हें भी दस्तावेज़ निर्देशिका में सहेजा जाना चाहिए। iOS पर, UIDocumentPickerViewController के माध्यम से आयात asCopy: true पैरामीटर का उपयोग करने पर स्वचालित रूप से फ़ाइल की एक प्रति Documents में रखता है। Android पर, SAF डायलॉग के माध्यम से आयात भी ऐप सैंडबॉक्स में फ़ाइल की एक प्रति बनाता है। डेटा निर्यात करते समय (उदाहरण के लिए, संपर्कों के साथ CSV फ़ाइल बनाना), पहले फ़ाइल को Documents/filesDir में सहेजें, फिर उपयोगकर्ता को Share Sheet के माध्यम से इसे साझा करने का विकल्प दें। यह सुनिश्चित करता है कि भले ही उपयोगकर्ता भेजने के बाद फ़ाइल को सहेजना भूल जाए, बाद में उपयोग के लिए ऐप में एक प्रति बनी रहे।
Android पर, दस्तावेज़ निर्देशिका का कार्य context.filesDir करता है। इसके अतिरिक्त, SD कार्ड पर context.externalFilesDir निर्देशिका उपलब्ध है, लेकिन यह डेटा अखंडता की गारंटी नहीं देती है। आइए इन निर्देशिकाओं के साथ काम करने की मुख्य तकनीकों को देखें।
filesDir Android पर ऐप की स्थायी फ़ाइलों के लिए मुख्य निर्देशिका है। यह ऐप सैंडबॉक्स में स्थित है और अनइंस्टॉल करने पर पूरी तरह हटा दी जाती है। File इंस्टेंस प्राप्त करने के लिए, context.filesDir का उपयोग करें, जो /data/data/<package>/files/ का पथ लौटाता है। फ़ाइलें बनाने और पढ़ने के लिए, मानक Java/Kotlin File ऑपरेशन या Context विधियाँ openFileInput() और openFileOutput() का उपयोग करें, जो फ़ाइल नाम लेती हैं और FileInputStream/FileOutputStream लौटाती हैं। openFileOutput() विधि स्वचालित रूप से filesDir में फ़ाइल बनाती है यदि वह अभी तक मौजूद नहीं है और एक्सेस मोड निर्दिष्ट करने की अनुमति देती है: MODE_PRIVATE (केवल वर्तमान ऐप), MODE_APPEND (जोड़ना), या MODE_WORLD_READABLE (अप्रचलित, API 24+ से उपयोग नहीं किया गया)।
val fileName = "report.pdf"
val content = "PDF content".toByteArray()
context.openFileOutput(fileName, Context.MODE_PRIVATE).use { stream ->
stream.write(content)
}
val bytes = context.openFileInput(fileName).use { stream ->
stream.readBytes()
}
Android 10+ पर, Scoped Storage मॉडल filesDir को प्रभावित नहीं करता — ऐप के अपने सैंडबॉक्स तक पूर्ण पहुँच बनी रहती है। filesDir के अंदर सभी पढ़ने और लिखने के संचालन के लिए अतिरिक्त अनुमतियों की आवश्यकता नहीं है। हालाँकि, यदि आप filesDir के माध्यम से किसी अन्य ऐप की फ़ाइलों तक पहुँचने का प्रयास करते हैं, तो आपको एक अपवाद मिलेगा। फ़ाइलें साझा करने के लिए, FileProvider का उपयोग करें, जो किसी अन्य ऐप को फ़ाइल स्थानांतरित करने के लिए एक अस्थायी सामग्री URI बनाता है। FileProvider को AndroidManifest.xml में <provider> टैग के माध्यम से घोषित किया जाता है और XML पथ फ़ाइल में कॉन्फ़िगर किया जाता है। यह ऐप्स के बीच फ़ाइलों को स्थानांतरित करने का मानक तंत्र है, जिसका उपयोग उदाहरण के लिए, ACTION_SEND के साथ Intent के माध्यम से छवि भेजते समय किया जाता है।
iOS पर, Documents Directory विशेष स्थिति वाले ऐप के Sandbox कंटेनर का हिस्सा है। इस निर्देशिका की फ़ाइलें स्वचालित रूप से iCloud बैकअप में शामिल होती हैं, Files ऐप में प्रदर्शित होती हैं, और App Store के माध्यम से ऐप अपडेट के दौरान संरक्षित रहती हैं।
Documents का स्वचालित बैकअप iOS का एक प्रमुख लाभ है। जब उपयोगकर्ता डिवाइस को iTunes से कनेक्ट करता है या iCloud Backup सक्षम करता है, तो Documents/ की सभी फ़ाइलें बैकअप में कॉपी हो जाती हैं। नए डिवाइस पर पुनर्स्थापित करते समय, उपयोगकर्ता को बिना किसी अतिरिक्त कार्रवाई के अपनी सभी फ़ाइलें मिल जाती हैं। हालाँकि, यह लाभ एक नुकसान बन जाता है यदि ऐप Documents में बड़ी मात्रा में डेटा संग्रहीत करता है: बैकअप का समय बढ़ जाता है और iCloud स्टोरेज जल्दी खत्म हो सकता है। इसलिए, Documents में केवल वही फ़ाइलें संग्रहीत की जानी चाहिए जिनकी उपयोगकर्ता को पुनर्स्थापना के दौरान वास्तव में आवश्यकता हो। अस्थायी फ़ाइलें, कैश और पुनः निर्माण योग्य डेटा Caches या Library/Application Support में होना चाहिए। Apple isExcludedFromBackup विशेषता के माध्यम से इंटरनेट से पुनः डाउनलोड की जा सकने वाली फ़ाइलों को बैकअप से बाहर करने की अनुशंसा करता है।
let fm = FileManager.default
let docsURL = fm.urls(
for: .documentDirectory,
in: .userDomainMask
).first!
let fileURL = docsURL.appendingPathComponent("notes.txt")
let text = "नोट सामग्री"
try text.write(to: fileURL, atomically: true, encoding: .utf8)
iCloud Drive उपयोगकर्ता के उपकरणों में Documents से फ़ाइलों को सिंक्रोनाइज़ करने की अनुमति देता है। सिंक्रोनाइज़ेशन सक्षम करने के लिए, ऐप को NSDocument या UIDocument API का उपयोग करना चाहिए, जो स्वचालित रूप से संस्करणण और विवाद समाधान का प्रबंधन करते हैं। एक वैकल्पिक दृष्टिकोण CloudKit के साथ iCloud का उपयोग करना है, जो सिंक्रोनाइज़ेशन पर अधिक लचीला नियंत्रण प्रदान करता है लेकिन CloudKit Dashboard पर कॉन्फ़िगरेशन की आवश्यकता होती है। iCloud Drive का उपयोग करते समय, सुनिश्चित करें कि आप संपादन विवादों को सही ढंग से संभालते हैं (मर्ज या लास्ट-राइट-विंस) और ऐप इंटरफ़ेस के माध्यम से उपयोगकर्ता को सिंक्रोनाइज़ेशन स्थिति के बारे में सूचित करते हैं। iCloud तत्काल सिंक्रोनाइज़ेशन की गारंटी नहीं देता — फ़ाइल आकार और कनेक्शन गुणवत्ता के आधार पर देरी कुछ सेकंड से लेकर कई मिनट तक हो सकती है। महत्वपूर्ण डेटा के लिए, लेन-देन संबंधी लेखन और संस्करणण का उपयोग करें ताकि विवाद की स्थिति में फ़ाइल के पिछले संस्करण को पुनर्स्थापित किया जा सके।
सही चुनाव Documents Directory और Cache Directory के बीच उपयोगकर्ता डेटा भंडारण की विश्वसनीयता निर्धारित करता है। चुनाव में त्रुटि या तो डेटा हानि (यदि महत्वपूर्ण फ़ाइलें कैश में संग्रहीत हैं) या बैकअप ओवरफ़्लो (यदि अस्थायी फ़ाइलें Documents में संग्रहीत हैं) की ओर ले जाती है।
| मापदंड | Documents Directory | Cache Directory |
|---|---|---|
| डेटा अखंडता गारंटी | उच्च — सिस्टम द्वारा हटाया नहीं जाता | निम्न — साफ़ किया जा सकता है |
| बैकअप (iOS) | स्वचालित रूप से iCloud में | बैकअप नहीं होता |
| उपयोगकर्ता दृश्यता (iOS) | Files ऐप में | छिपा हुआ |
| अपडेट पर सफ़ाई | साफ़ नहीं होता | साफ़ किया जा सकता है |
| अनुशंसित आकार | कोई भी, लेकिन सेटिंग्स के माध्यम से नियंत्रित | 100–200 MB तक |
| डेटा प्रकार | उपयोगकर्ता फ़ाइलें | अस्थायी पुनः निर्माण योग्य डेटा |
सर्वोत्तम अभ्यास दस्तावेज़ निर्देशिका के उपयोग में कई प्रमुख नियम शामिल हैं। पहला, इस निर्देशिका से फ़ाइलें हटाने से पहले हमेशा उपयोगकर्ता की पुष्टि लें। कैश के विपरीत, किसी दस्तावेज़ को हटाने से उपयोगकर्ता सामग्री की अपरिवर्तनीय हानि हो सकती है। दूसरा, फ़ाइल संस्करणण लागू करें: किसी मौजूदा फ़ाइल को ओवरराइट करते समय, _backup प्रत्यय के साथ पिछला संस्करण सहेजें या Snapshot तंत्र का उपयोग करें। तीसरा, उपयोगकर्ता को दस्तावेज़ निर्देशिका से फ़ाइलों को देखने, नाम बदलने, हटाने और निर्यात करने के लिए एक इंटरफ़ेस प्रदान करें। iOS पर, Documents की फ़ाइलें स्वचालित रूप से Files में प्रदर्शित होती हैं; Android पर, आपको अपना स्वयं का फ़ाइल प्रबंधक लागू करना होगा या तृतीय-पक्ष लाइब्रेरी का उपयोग करना होगा।
ऐप अपडेट के दौरान डेटा माइग्रेशन पर विशेष ध्यान दें। यदि नया संस्करण फ़ाइल भंडारण संरचना बदलता है (उदाहरण के लिए, डेटा को एक उपनिर्देशिका से दूसरी में स्थानांतरित करता है या फ़ाइल प्रारूप बदलता है), तो अपडेट के बाद पहले लॉन्च पर एक बार का माइग्रेशन लागू करें। डेटा स्कीमा संस्करण संख्या SharedPreferences में संग्रहीत करें और यदि वे मेल नहीं खाते हैं तो माइग्रेशन चलाएँ। माइग्रेशन पूरा होने से पहले पुरानी फ़ाइलों को न हटाएँ — विफलता की स्थिति में, उपयोगकर्ता को डेटा नहीं खोना चाहिए। यदि माइग्रेशन में प्रारूप रूपांतरण शामिल है (उदाहरण के लिए, JSON से SQLite में स्विच करना), तो मूल फ़ाइलों को माइग्रेशन दिनांक के साथ एक अलग निर्देशिका में बैकअप के रूप में सहेजें। उपयोगकर्ता को Apple Human Interface Guidelines की अनुशंसा के अनुसार, अपडेट के बाद पहले 30 दिनों के भीतर ऐप सेटिंग्स के माध्यम से परिवर्तनों को पूर्ववत करने में सक्षम होना चाहिए।
अक्सर पूछे जाने वाले प्रश्न
Documents Files ऐप में प्रदर्शित होता है और स्वचालित रूप से iCloud में बैकअप होता है। Application Support Files में प्रदर्शित नहीं होता और डिफ़ॉल्ट रूप से बैकअप नहीं होता। ऐप के आंतरिक डेटा के लिए Application Support चुनें जिसे आपको उपयोगकर्ता को दिखाने की आवश्यकता नहीं है।
हाँ, खाता हटाते समय, उपयोगकर्ता को उस खाते से जुड़ी सभी स्थानीय फ़ाइलों को साफ़ करने का विकल्प दें। “सभी स्थानीय डेटा हटाएँ?” पूछने वाला एक संवाद दिखाएँ और सूचीबद्ध करें कि कौन सी फ़ाइलें प्रभावित होंगी। यह GDPR आवश्यकता और App Store एवं Google Play नीतियों का अनुपालन है।
iOS पर, बस डिवाइस को iCloud या iTunes बैकअप से पुनर्स्थापित करें — Documents की फ़ाइलें स्वचालित रूप से पुनर्स्थापित हो जाती हैं। Android पर, filesDir से फ़ाइलों का बैकअप लेने के लिए Google Drive Backup API का उपयोग करें या क्लाउड सेवा के माध्यम से निर्यात लागू करें।
iOS पर, उपयोगकर्ता Files ऐप के माध्यम से फ़ाइलें हटा सकता है। Android पर, हटाना केवल आपके ऐप के इंटरफ़ेस के माध्यम से संभव है। आकस्मिक डेटा हानि को रोकने के लिए हटाने के बाद 30 दिनों के भीतर पुनर्स्थापना की क्षमता के साथ एक दस्तावेज़ ट्रैश लागू करने की अनुशंसा की जाती है।
कोई अतिरिक्त कार्रवाई आवश्यक नहीं है — iOS और Android App Store या Google Play के माध्यम से अपडेट के दौरान स्वचालित रूप से दस्तावेज़ निर्देशिका को संरक्षित करते हैं। हालाँकि, भंडारण संरचना बदलते समय, सेटिंग्स में स्कीमा संस्करण संख्या की जाँच करके नए संस्करण के पहले लॉन्च पर डेटा माइग्रेशन लागू करें।
सारांश
context.filesDir का उपयोग करता है — फ़ाइलें अपडेट के दौरान संरक्षित रहती हैं लेकिन कोई अंतर्निहित बैकअप तंत्र नहीं हैहम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें