ऐप आंतरिक स्टोरेज डिवाइस पर एक समर्पित स्थान है जो पृथक स्टोरेज के माध्यम से केवल एक विशिष्ट एप्लिकेशन के लिए सुलभ है। Android Developers, 2026 के अनुसार, प्रत्येक एप्लिकेशन को अपनी स्वयं की सैंडबॉक्स निर्देशिका मिलती है जिस तक अन्य एप्लिकेशन सीधे पहुंच नहीं सकते। यह दृष्टिकोण डेटा को अनधिकृत पढ़ने से बचाता है और मोबाइल उपकरणों के मल्टीटास्किंग वातावरण में स्थिर संचालन सुनिश्चित करता है।
मुख्य बिंदु
Context.getFilesDir(), getCacheDir() और getDataDir() प्रदान करता हैNSDocumentDirectory और NSCachesDirectory का उपयोग करता हैऐप आंतरिक स्टोरेज एक पृथक निर्देशिका है जो ऑपरेटिंग सिस्टम इंस्टॉलेशन के दौरान प्रत्येक एप्लिकेशन को आवंटित करता है। अन्य एप्लिकेशन और उपयोगकर्ता मानक फ़ाइल प्रबंधकों के माध्यम से इस निर्देशिका तक नहीं पहुंच सकते। सिस्टम गारंटी देता है कि इस निर्देशिका के अंदर的所有 डेटा एप्लिकेशन अनइंस्टॉल होने पर पूरी तरह से हटा दिया जाएगा। यह दृष्टिकोण मोबाइल ऑपरेटिंग सिस्टम सुरक्षा मॉडल की नींव बनाता है, प्रोग्रामों के बीच गोपनीय जानकारी के रिसाव को रोकता है।
बाहरी स्टोरेज (SD कार्ड) के विपरीत, आंतरिक स्टोरेज हमेशा उपलब्ध रहता है और मीडिया की उपस्थिति की जाँच की आवश्यकता नहीं होती। आधुनिक उपकरणों में NAND फ्लैश मेमोरी में पढ़ने और लिखने की गति 800–900 MB/s अनुक्रमिक पठन और 200–300 MB/s अनुक्रमिक लेखन तक पहुँचती है, जो SATA SSD के बराबर है। आवंटित क्षेत्र का आकार डिवाइस की कुल क्षमता और निर्माता नीति पर निर्भर करता है: 64 GB फ्लैश मेमोरी वाले उपकरणों पर, ऐप को आवश्यकतानुसार विस्तार की संभावना के साथ 16 से 64 MB प्रारंभिक स्थान मिलता है।
आंतरिक स्टोरेज आर्किटेक्चर Android और iOS के बीच भिन्न होता है। Android पर, प्रत्येक एप्लिकेशन को एक /data/data/<package_name>/ निर्देशिका मिलती है, जिसके अंदर सिस्टम files/, cache/ और databases/ उपनिर्देशिकाएँ बनाता है। iOS पर, एप्लिकेशन Documents/, Library/ और tmp/ निर्देशिकाओं वाले सैंडबॉक्स कंटेनर में काम करता है, जिनमें से प्रत्येक का अपना उद्देश्य और बैकअप नीति होती है।
डेवलपर्स के पास ऐप आंतरिक स्टोरेज में डेटा सहेजने के कई तरीके उपलब्ध हैं। प्रत्येक विधि एक विशिष्ट कार्य को हल करती है और एक विशेष प्रकार के डेटा के लिए उपयुक्त है। सही तरीका चुनना सीधे एप्लिकेशन के प्रदर्शन, डेवलपमेंट की सुविधा और उपयोगकर्ता डेटा सुरक्षा को प्रभावित करता है।
सबसे निचले स्तर का तरीका फ़ाइल निर्देशिका में सीधे फ़ाइल लिखना है। एक ऐप अपने सैंडबॉक्स के अंदर कोई भी फ़ाइलें और निर्देशिकाएँ बना सकता है। यह विधि मीडिया फ़ाइलों, उपयोगकर्ता दस्तावेज़ों और किसी भी बाइनरी डेटा को संग्रहीत करने के लिए उपयुक्त है जिसे संरचित संगठन की आवश्यकता नहीं है। Android पर, निर्देशिका तक पहुंच Context.getFilesDir() कॉल के माध्यम से की जाती है, जो ऐप की फ़ाइल निर्देशिका का पूर्ण पथ लौटाता है। iOS पर, NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) फ़ंक्शन समान उद्देश्य पूरा करता है।
कुंजी-मान जोड़े संग्रहीत करने के लिए, Android SharedPreferences और Kotlin कोरूटीन और प्रोटोबफ प्रोटोकॉल पर आधारित अधिक आधुनिक DataStore प्रदान करता है। SharedPreferences /data/data/<package>/shared_prefs/ निर्देशिका के अंदर XML फ़ाइल में डेटा संग्रहीत करता है। सादगी के बावजूद, SharedPreferences में कमियाँ हैं: सिंक्रोनस लेखन UI थ्रेड पर देरी का कारण बन सकता है, और टाइप सुरक्षा की कमी त्रुटियों के जोखिम को बढ़ाती है। DataStore Flow पर आधारित एसिंक्रोनस API और प्रोटोबफ स्कीमा के माध्यम से पूर्ण टाइप समर्थन प्रदान करके इन समस्याओं को हल करता है।
रिलेशनल कनेक्शन वाले संरचित डेटा के लिए, SQLite या Room रैपर सबसे अच्छा विकल्प है। डेटाबेस databases/ निर्देशिका के अंदर एक फ़ाइल में संग्रहीत होता है और पूर्ण SQL सिंटैक्स का समर्थन करता है। Room एक आधिकारिक Jetpack लाइब्रेरी है जो टाइप-सुरक्षित API, स्वचालित स्कीमा माइग्रेशन और कोरूटीन समर्थन प्रदान करती है। उचित इंडेक्सिंग के साथ डेटाबेस का आकार बिना महत्वपूर्ण प्रदर्शन हानि के कई गीगाबाइट तक पहुँच सकता है। मोबाइल उपकरणों पर SQLite एक आधुनिक फ्लैगशिप प्रोसेसर पर प्रति सेकंड 50,000 लेखन संचालन तक संभालता है।
गोपनीय डेटा जैसे प्रमाणीकरण टोकन और एन्क्रिप्शन कुंजियाँ संग्रहीत करने के लिए, Android EncryptedSharedPreferences प्रदान करता है। मानक SharedPreferences पर यह रैपर AES256-GCM-None का उपयोग करके कुंजियों और मानों को स्वचालित रूप से एन्क्रिप्ट करता है। डिस्क पर लिखने से पहले फ़ाइल स्तर पर एन्क्रिप्शन किया जाता है, इसलिए डिवाइस तक भौतिक पहुंच के साथ भी, हमलावर सामग्री नहीं पढ़ सकता। EncryptedSharedPreferences AndroidX Security लाइब्रेरी का हिस्सा है, जिसमें संपूर्ण फ़ाइलों को एन्क्रिप्ट करने के लिए EncryptedFile भी शामिल है।
Android SDK Context क्लास के माध्यम से आंतरिक स्टोरेज के साथ काम करने के लिए विधियों का एक सेट प्रदान करता है। प्रत्येक विधि ऐप सैंडबॉक्स के अंदर एक विशिष्ट सिस्टम निर्देशिका का पथ लौटाती है। आइए Kotlin उदाहरण का उपयोग करके बुनियादी फ़ाइल लेखन और पठन संचालन देखें।
आंतरिक फ़ाइल निर्देशिका का पथ प्राप्त करने की मुख्य विधि context.filesDir है। यह एक File ऑब्जेक्ट लौटाता है जो /data/data/<package>/files/ निर्देशिका की ओर इशारा करता है। पहली पहुंच पर, सिस्टम स्वचालित रूप से सभी आवश्यक मूल निर्देशिकाएँ बनाता है। आंतरिक स्टोरेज में फ़ाइल आकार स्पष्ट रूप से सीमित नहीं हैं, लेकिन डेटा की कुल मात्रा /data विभाजन पर उपलब्ध स्थान से अधिक नहीं होनी चाहिए, जो आमतौर पर कुल फ्लैश मेमोरी क्षमता का 60–80% होता है।
val context = getApplicationContext()
val file = File(context.filesDir, "notes.txt")
file.writeText("नोट की सामग्री")
val content = file.readText()
println("पढ़ा गया: $content")
writeText और readText विधियाँ Kotlin मानक लाइब्रेरी के एक्सटेंशन फ़ंक्शन हैं। वे स्वचालित रूप से स्ट्रीम के खुलने और बंद होने का प्रबंधन करती हैं, जिससे मेमोरी लीक समाप्त होती है। बाइनरी डेटा के लिए, writeBytes और readBytes का उपयोग करें, जिन्हें एन्कोडिंग की आवश्यकता नहीं होती और वे ByteArray ऐरे के साथ काम करते हैं। बड़ी फ़ाइलों के साथ काम करते समय, बफ़र्ड स्ट्रीम का उपयोग करने की सिफारिश की जाती है: टेक्स्ट के लिए BufferedReader और BufferedWriter, बाइनरी डेटा के लिए BufferedInputStream और BufferedOutputStream।
फ़ाइलों को पदानुक्रम में व्यवस्थित करने के लिए, filesDir के अंदर उपनिर्देशिकाएँ बनाएँ। यह डेटा को प्रकार के अनुसार संरचित करने में मदद करता है: छवियाँ, दस्तावेज़, निर्यात फ़ाइलें। mkdirs() विधि पथ में सभी लापता निर्देशिकाएँ बनाती है, जिसमें नेस्टेड निर्देशिकाएँ भी शामिल हैं। सुनिश्चित करें कि निर्माण कार्रवाई सफल हुई — विधि केवल नई निर्देशिकाएँ बनने पर true लौटाती है। निर्माण विफलताएँ अक्सर /data विभाजन पर अपर्याप्त स्थान या फ़ाइल सिस्टम इनोड समाप्ति से संबंधित होती हैं।
val imagesDir = File(context.filesDir, "images")
if (imagesDir.mkdirs()) {
println("निर्देशिका बनाई गई")
}
val imageFile = File(imagesDir, "photo.jpg")
imageFile.writeBytes(byteArray)
बड़ी फ़ाइलें लिखने से पहले उपलब्ध स्थान की जाँच करने के लिए, File.getFreeSpace() या File.getUsableSpace() का उपयोग करें। दूसरी विधि सुरक्षा कोटा को ध्यान में रखते हुए वर्तमान एप्लिकेशन के लिए उपलब्ध बाइट्स की संख्या लौटाती है — यह बहु-उपयोगकर्ता उपकरणों के संदर्भ में अधिक सटीक है। यदि उपलब्ध स्थान अपेक्षित फ़ाइल आकार से कम है, तो उपयोगकर्ता को एक संदेश दिखाएँ और डिवाइस सेटिंग्स में स्थान खाली करने का सुझाव दें।
iOS पर, प्रत्येक एप्लिकेशन एक पृथक सैंडबॉक्स कंटेनर में काम करता है। सिस्टम विशेष entitlements के बिना इसकी सीमाओं से बाहर जाने के लिए API प्रदान नहीं करता। फ़ाइल सिस्टम के साथ काम करने का मुख्य उपकरण Foundation फ्रेमवर्क का FileManager वर्ग है। सैंडबॉक्स कंटेनर में कई मानक निर्देशिकाएँ शामिल हैं, जिनमें से प्रत्येक की अपनी बैकअप नीति है।
Documents निर्देशिका उपयोगकर्ता डेटा के लिए है जो एप्लिकेशन लॉन्च के बीच बना रहना चाहिए और बैकअप से पुनर्स्थापित होना चाहिए। iOS स्वचालित रूप से इस निर्देशिका को iCloud और iTunes बैकअप में शामिल करता है। urls(for:in:) विधि अनुरोधित निर्देशिका के URL की एक सरणी लौटाती है — सरणी में पहला तत्व प्राथमिक है।
let fm = FileManager.default
let docs = fm.urls(
for: .documentDirectory,
in: .userDomainMask
).first!
let fileURL = docs.appendingPathComponent("data.plist")
try data.write(to: fileURL)
FileManager फ़ाइल संचालन के पूर्ण सेट का समर्थन करता है: फ़ाइलें बनाना, कॉपी करना, स्थानांतरित करना, हटाना और नाम बदलना। प्रत्येक संचालन त्रुटि उत्पन्न कर सकता है, इसलिए सभी कॉल को do-catch निर्माण में लपेटा जाना चाहिए। फ़ाइल हटाने पर विशेष ध्यान दें — संचालन अपरिवर्तनीय है, और removeItem(at:) के बाद डेटा पुनर्स्थापित करना पूर्व बैकअप के बिना असंभव है।
सैंडबॉक्स कंटेनर में सभी डेटा iCloud बैकअप में शामिल नहीं होना चाहिए। उदाहरण के लिए, डाउनलोड की गई कैश की गई छवियाँ या अस्थायी प्रसंस्करण फ़ाइलों को पुनर्स्थापित करने की आवश्यकता नहीं है — वे अगले उपयोग पर पुनः बनाई जाएँगी। किसी निर्देशिका या फ़ाइल को बैकअप से बाहर करने के लिए, isExcludedFromBackup विशेषता को true पर सेट करें। Apple उन डेटा को बैकअप से हमेशा बाहर करने की सिफारिश करता है जिन्हें दूरस्थ रूप से पुनर्स्थापित किया जा सकता है, iCloud स्टोरेज उपयोग को कम करने और पुनर्प्राप्ति समय को कम करने के लिए।
var cacheURL = fm.urls(
for: .cachesDirectory,
in: .userDomainMask
).first!
cacheURL.hasExcludedFromBackupKey = true
var values = URLResourceValues()
values.isExcludedFromBackup = true
try cacheURL.setResourceValues(values)
मोबाइल डिवाइस पर प्रत्येक स्टोरेज प्रकार का अपना उद्देश्य और उपयोग नियम होते हैं। इन अंतरों को समझने से डेवलपर को प्रत्येक प्रकार के डेटा के लिए सही स्थान चुनने में मदद मिलती है। नीचे एप्लिकेशन के लिए उपलब्ध तीन मुख्य स्टोरेज प्रकारों की तुलना दी गई है।
| विशेषता | Internal Storage | कैश निर्देशिका | External Storage |
|---|---|---|---|
| अन्य ऐप्स को दृश्यता | छिपा हुआ | छिपा हुआ | सुलभ |
| ऐप अनइंस्टॉल करने पर विलोपन | पूर्ण | पूर्ण | स्थान पर निर्भर |
| बैकअप | Android — नहीं, iOS — हाँ (Documents) | नहीं | केवल सिंक करते समय |
| मीडिया के बिना उपलब्धता | हमेशा | हमेशा | SD कार्ड आवश्यक |
| डेटा हानि जोखिम | न्यूनतम | उच्च | मध्यम |
| अनुशंसित फ़ाइल आकार | 100 MB तक | 50 MB तक | कोई भी |
आंतरिक स्टोरेज ऐप कॉन्फ़िगरेशन, डेटाबेस फ़ाइलों और उपयोगकर्ता दस्तावेज़ों को संग्रहीत करने के लिए सबसे उपयुक्त है जो अन्य प्रोग्रामों के लिए सुलभ नहीं होने चाहिए। कैश निर्देशिका अस्थायी फ़ाइलों के लिए है जिन्हें अगले उपयोग पर पुनः बनाया जा सकता है: डाउनलोड की गई छवियाँ, API प्रतिक्रियाएँ, मध्यवर्ती प्रसंस्करण डेटा। बाहरी स्टोरेज बड़ी मीडिया फ़ाइलों (फ़ोटो, वीडियो, संगीत) और उन डेटा के लिए सबसे उपयुक्त है जिन्हें उपयोगकर्ता साझा पहुंच के माध्यम से अन्य एप्लिकेशन के साथ साझा करना चाहता है।
स्टोरेज प्रकार चुनना Google Play और App Store में ऐप रेटिंग को भी प्रभावित करता है। जो एप्लिकेशन बिना सफाई के आंतरिक स्टोरेज में बड़ी मात्रा में डेटा संग्रहीत करते हैं, उन्हें नकारात्मक समीक्षाएँ मिलती हैं: उपयोगकर्ता स्थान की कमी की शिकायत करते हैं। App Annie के एक अध्ययन के अनुसार, 62% उपयोगकर्ता किसी ऐप को हटा देते हैं यदि वह सफाई विकल्प के बिना डिवाइस के आंतरिक स्टोरेज का 500 MB से अधिक लेता है।
ऐप आंतरिक स्टोरेज का उचित प्रबंधन प्रदर्शन, सुरक्षा और उपयोगकर्ता अनुभव में सुधार करता है। निम्नलिखित सिफारिशें आधिकारिक Android और iOS दस्तावेज़ीकरण के साथ-साथ लाखों इंस्टॉल वाले एप्लिकेशन विकसित करने के व्यावहारिक अनुभव पर आधारित हैं।
सीमांत मामलों के परीक्षण पर विशेष ध्यान दिया जाना चाहिए। आंतरिक स्टोरेज भर जाने पर, लेखन संचालन अप्रत्याशित रूप से बाधित होने पर (ऐप क्रैश, इनकमिंग कॉल), और iOS बैकअप से पुनर्स्थापित करने पर एप्लिकेशन के व्यवहार की जाँच करें। इनमें से प्रत्येक परिदृश्य में, डेटा सुसंगत रहना चाहिए या अंतिम स्थिर स्थिति में पुनर्स्थापित होना चाहिए। लेन-देन फ़ाइलों का उपयोग करें: डेटा को एक अस्थायी फ़ाइल में लिखें, फिर इसे परमाणु रूप से लक्ष्य में नाम बदलें। यह लेखन विफलता पर दूषित डेटा को पढ़ने से रोकता है।
उपयोगकर्ता नियंत्रण के बारे में न भूलें। ऐप सेटिंग्स में अस्थायी डेटा साफ़ करने और कब्जा किए गए आंतरिक स्टोरेज वॉल्यूम को प्रदर्शित करने का विकल्प प्रदान करें। Google Play Console के अनुसार, इस सुविधा वाले ऐप्स को “प्रदर्शन” श्रेणी में 18% अधिक सकारात्मक समीक्षाएँ मिलती हैं।
अक्सर पूछे जाने वाले प्रश्न
ऐप के आंतरिक स्टोरेज से सभी डेटा पूरी तरह से हटा दिया जाता है। ऑपरेटिंग सिस्टम डेटाबेस, सेटिंग्स और अस्थायी फ़ाइलों सहित अवशिष्ट फ़ाइलों की अनुपस्थिति की गारंटी देता है। बाहरी स्टोरेज पर डेटा बना रह सकता है।
डिवाइस तक रूट एक्सेस के बिना, अन्य ऐप किसी दूसरे ऐप की Internal Storage से फ़ाइलें नहीं पढ़ सकते। Android पर, इसके लिए सुपरयूज़र विशेषाधिकारों की आवश्यकता होती है, जबकि iOS पर, सैंडबॉक्स के माध्यम से कर्नेल स्तर पर अलगाव लागू किया जाता है।
कोई स्पष्ट सीमा नहीं है, लेकिन कुल मात्रा /data विभाजन पर उपलब्ध स्थान द्वारा सीमित है। प्रति एप्लिकेशन 100 MB से अधिक नहीं करने की सिफारिश की जाती है — बड़ी मात्रा को बाहरी स्टोरेज या क्लाउड पर रखना बेहतर है।
filesDir स्थायी ऐप डेटा के लिए है और सिस्टम इसे आवश्यकता होने पर ही हटाता है। cacheDir अस्थायी फ़ाइलों के लिए है जिन्हें सिस्टम मेमोरी कम होने पर हटा सकता है। सिस्टम cacheDir की स्थिरता की गारंटी नहीं देता।
Internal Storage से SD कार्ड में सीधी प्रतिलिपि सुरक्षा नीति द्वारा निषिद्ध है। उपयोगकर्ता की सहमति से साझा स्टोरेज में डेटा की प्रतियाँ बनाने के लिए Android 10+ पर MediaStore API या SAF (Storage Access Framework) का उपयोग करें।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें