Kotlin में resources से फ़ाइल पढ़ना: पूर्ण गाइड उदाहरण सहित

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Kotlin में resources फ़ोल्डर से टेक्स्ट फ़ाइल कैसे पढ़ें: चरण-दर-चरण ट्यूटोरियल

\n\n

नमस्ते दोस्त! अगर आपने कभी Android के लिए Kotlin में कोड लिखा है या कोई कंसोल एप्लिकेशन बनाया है, तो आपने एक आम लेकिन मुश्किल समस्या का सामना किया होगा: resources फ़ोल्डर में रखी टेक्स्ट फ़ाइल को कैसे पढ़ें? यह आसान लगता है, लेकिन Stack Overflow पर "How to read a text file from resources in Kotlin?" सवाल हजारों बार देखा गया है। इसका मतलब है कि यह एक असली चुनौती है।

\n\n

इस लेख में हम 5 विश्वसनीय तरीके सीखेंगे। आप जानेंगे कि javaClass और ClassLoader में क्या अंतर है, NullPointerException से कैसे बचें, और अगर आपका प्रोजेक्ट लाइब्रेरी है (एप्लिकेशन नहीं) तो क्या करें। चलिए शुरू करते हैं!

\n\n

1. तैयारी: फ़ाइल कहाँ रखें?

\n

पढ़ने से पहले, फ़ाइल को सही जगह पर रखना ज़रूरी है। Kotlin (Gradle, Maven) के स्टैंडर्ड प्रोजेक्ट में resources फ़ोल्डर आमतौर पर यहाँ होता है:

\n\n
src/main/resources/
\n\n

टेस्ट के लिए — src/test/resources/। अगर आपका Android प्रोजेक्ट है, तो resources src/main/res/raw/ में रखे जाते हैं (लेकिन इसकी अपनी अलग लॉजिक है, जिसके बारे में नीचे बताया गया है)। हम यहाँ सिर्फ Kotlin/JVM पर फोकस करेंगे।

\n\n

चलिए एक सरल फ़ाइल data.txt बनाते हैं जिसमें यह कंटेंट हो:

\n
नमस्ते दुनिया!\nये resources से लाइनें हैं।\nKotlin शानदार है।
\n\n

बढ़िया, टूल तैयार है। अब देखते हैं इसे कैसे खोलें।

\n\n

2. तरीका #1: javaClass के ज़रिए क्लासिक तरीका

\n

सबसे लोकप्रिय और आसान तरीका है javaClass का उपयोग करना (यह Java के getClass() का Kotlin रैपर है)।

\n\n
import java.io.File\n\nfun readFromResources(fileName: String): String {\n    val inputStream = this::class.java.classLoader?.getResourceAsStream(fileName)\n        ?: throw IllegalArgumentException("फ़ाइल $fileName resources में नहीं मिली")\n    return inputStream.bufferedReader().readText()\n}
\n\n

कोड की व्याख्या:

\n
    \n
  • this::class.java — मौजूदा ऑब्जेक्ट का Java क्लास प्राप्त करता है।
  • \n
  • .classLoader — ClassLoader (क्लास लोडर) लेता है।
  • \n
  • getResourceAsStream(fileName) — फ़ाइल का स्ट्रीम खोलता है।
  • एल्विस ऑपरेटर ?: फ़ाइल न मिलने पर एक्सेप्शन फेंकता है।
\n\n

इसे कॉल करें:

\n
fun main() {\n    val content = readFromResources("data.txt")\n    println(content)\n}
\n\n

आउटपुट में हमारी फ़ाइल की तीन लाइनें दिखेंगी। सरल और सुंदर।

\n\n

3. तरीका #2: यूटिलिटी के लिए object का उपयोग

\n

अगर आप एक यूटिलिटी क्लास बना रहे हैं, तो लॉजिक को object (सिंगलटन) में रखना सुविधाजनक है। Kotlin में यह इस तरह किया जाता है:

\n\n
object ResourceReader {\n    fun readText(fileName: String): String {\n        val stream = ResourceReader::class.java.classLoader\n            .getResourceAsStream(fileName)\n            ?: throw FileNotFoundException("resources $fileName नहीं मिला")\n        return stream.bufferedReader().readText()\n    }\n}\n\n// उपयोग:\nfun main() {\n    val text = ResourceReader.readText("config.json")\n    println(text)\n}
\n\n

ध्यान दें: हम ResourceReader::class.java का उपयोग कर रहे हैं — यह काम करता है क्योंकि object एक सिंगलटन है जिसका एक क्लास होता है।

\n\n

4. तरीका #3: URL के रूप में पढ़ें (पथ प्राप्त करने के लिए)

\n

कभी-कभी फ़ाइल की सामग्री नहीं, बल्कि उसका पथ चाहिए (जैसे किसी दूसरी लाइब्रेरी को देने के लिए)। तब getResource() का उपयोग करें:

\n\n
fun getResourcePath(fileName: String): String {\n    val url = this::class.java.classLoader.getResource(fileName)\n        ?: throw RuntimeException("resources $fileName नहीं मिला")\n    return url.path\n}
\n\n

लेकिन सावधान रहें: अगर प्रोजेक्ट JAR में पैक है, तो url.path आर्काइव के अंदर का पथ दिखा सकता है, और File इसे नहीं पढ़ पाएगा। ऐसे में हमेशा स्ट्रीम का उपयोग करना बेहतर है।

ब्लॉग

पुस्तक अनुशंसाएँ