Java संसाधन, iOS रिसॉर्स के साथ कैसे मैप होते हैं

Java रिसोर्स क्या होते हैं

Java संसाधन ऐसी डेटा फ़ाइलें होती हैं जिन्हें Java ऐप्लिकेशन और लाइब्रेरी के साथ पैकेज किया जाता है. ये रिसॉर्स, रनटाइम के दौरान लोड किए जाते हैं. इनमें से या तो Class.getResource(String name), java.net.URL या Class.getResourceAsStream(String name) दिखाता है, जो java.io.InputStream दिखाता है. आम तौर पर, getResourceAsStream() तरीके का इस्तेमाल तब किया जाता है, जब संसाधन के उपलब्ध होने की उम्मीद होती है. ऐसा इसलिए, क्योंकि अगर ऐसा नहीं है, तो IOException देता है. संसाधन मौजूद न होने पर getResource() तरीका'शून्य' दिखाता है. इसलिए, वैकल्पिक संसाधनों की जांच करना फ़ायदेमंद होता है.

संसाधनों के नाम और पाथ

J2ObjC, ऐप्लिकेशन के मुख्य बंडल ([NSBundle mainBundle]) को देखकर, रिसॉर्स को खोजता है. इसके लिए, संसाधन के रिलेटिव या ऐब्सलूट पाथ का इस्तेमाल करता है:

रिलेटिव पाथ

रिसॉर्स पाथ तय करने का मुख्य तरीका, रिलेटिव पाथ का इस्तेमाल करना है. रिलेटिव पाथ, फ़ॉरवर्ड स्लैश ('/') से शुरू नहीं होते हैं. किसी रिसॉर्स को किसी रिलेटिव पाथ से पढ़ते समय, क्लास के पैकेज का नाम बदल जाता है. इससे पैकेज के नाम में मौजूद पीरियड ('.') को फ़ॉरवर्ड स्लैश ('/') में बदल दिया जाता है. इसके बाद, Class.getResource(String name) या Class.getResourceAsStream(String name) मेथड कॉल में बताए गए रिलेटिव पाथ को पैकेज पाथ में जोड़ दिया जाता है.

उदाहरण के लिए, अगर किसी ऐप्लिकेशन में foo.bar.Mumble क्लास है, तो उस पैकेज में क्लास से जुड़े सभी रिसॉर्स का बेस पाथ /foo/bar होगा. Mumble.class.getResource("oops/error.jpg") को शुरू करने पर, oops/error.jpg को पैकेज के पाथ में जोड़ दिया जाता है. इसलिए, इसका पूरा रिसॉर्स पाथ /foo/bar/oops/error.jpg होता है.

ऐब्सलूट पाथ

संसाधन के नाम को फ़ॉरवर्ड स्लैश ('/') से शुरू करके, एक ऐब्सलूट पाथ का इस्तेमाल करके भी संसाधन को ऐक्सेस किया जा सकता है. पैकेज के नामों को अनदेखा किया जाता है. इसलिए, J2ObjC, ऐप्लिकेशन के मुख्य बंडल में मौजूद ऐब्सलूट पाथ का पता लगा लेता है. इसके लिए, यह ऐप्लिकेशन के Java सोर्स के Class.getResource(String name) या Class.getResourceAsStream(String name) रेफ़रंस में बताए गए पाथ का इस्तेमाल करता है. ऊपर दिए गए उदाहरण में, Mumble.class.getResource("/oops/error.jpg") में /oops/error.jpg का पूरा रिसॉर्स पाथ है, जिसमें foo.bar पैकेज नाम को अनदेखा किया जाता है.

iOS ऐप्लिकेशन में संसाधन जोड़ना

Xcode में iOS ऐप्लिकेशन में संसाधन फ़ाइलें जोड़ने के लिए, बिल्ड टारगेट का बिल्ड फ़ेज़ टैब खोलें. इसके बाद:

  • सामान्य टैब के नीचे मौजूद, + आइकॉन पर क्लिक करें और फ़ाइलों को कॉपी करने का नया चरण चुनें.
  • डेस्टिनेशन के तौर पर "संसाधन" चुनें (जावा संसाधन नहीं).
  • रिसॉर्स की डायरेक्ट्री डालें.
  • + चुनें और फ़ाइलों को उसकी सूची में जोड़ें.

चाहे रिलेशनल या ऐब्सलूट रिसॉर्स पाथ का इस्तेमाल किया गया हो, हर रिसॉर्स डायरेक्ट्री के लिए Xcode बिल्ड में एक अलग 'फ़ाइल कॉपी करें' के बिल्ड फ़ेज़ की ज़रूरत होती है.

उदाहरण

JreEmulation प्रोजेक्ट में एक "JRE JUnit Tests" ऐप्लिकेशन है, जो उस लाइब्रेरी के यूनिट टेस्ट चलाता है. उस टारगेट के बिल्ड चरण चुनें और फ़ाइल के कई फ़ेज़ देखें. फ़ाइल के अलग-अलग चरणों को कॉपी करने के लिए, अलग-अलग चरणों का इस्तेमाल किया जाता है. यहां, ClassTest.java एक ऐब्सलूट पाथ का इस्तेमाल करके उसी संसाधन को लोड करता है. इसके बाद, मिलते-जुलते पाथ का इस्तेमाल करता है. जांच के संसाधन, 'फ़ाइलें कॉपी करें' के बिल्ड फ़ेज़ का इस्तेमाल करके शामिल किए जाते हैं:

Xcode संसाधन