2011-10-10 10 views
7

मैं एक ऐसे अनुप्रयोग का विकास कर रहा हूं जो एक लाइब्रेरी का उपयोग करता है जो कॉन्फ़िगरेशन फ़ाइल को लोड करता है:ResourceAsStream() को जार फ़ाइल के बाहर फाइलें मिल सकती हैं?

InputStream in = getClass().getResourceAsStream(resource); 

मेरा अनुप्रयोग तब .jar फ़ाइल में पैक किया गया है। यदि resource.jar फ़ाइल के अंदर है, तो मैं "/relative/path/to/resource/resource" के रूप में पथ निर्दिष्ट कर सकता हूं।

मैं जानना चाहता हूं कि संसाधन को ढूंढना संभव है यदि यह .jar फ़ाइल के बाहर है, और इस मामले में, मैं पथ कैसे निर्दिष्ट करूं।

(मान लें कि मेरे एप्लिकेशन का जार app/ में है और संसाधन app/config में है)।


प्रोग्राम 3 rd पार्टी लाइब्रेरी का उपयोग करता है। लाइब्रेरी संसाधन को कॉन्फ़िगरेशन फ़ाइल के रूप में उपयोग करती है।

मैं भी जार फ़ाइल को अनजिप/ज़िप करने के बिना कॉन्फ़िगरेशन फ़ाइल को ट्विक करना चाहता हूं।

+0

पुस्तकालय @AndrewThompson के लिए एक पूर्ण पथ निर्दिष्ट JVM करने के लिए एक -Dconfig.location पारित कर सकते हैं एक विन्यास फाइल के रूप में संसाधन का उपयोग करता है (यह एक रोमांचक पार्टी लाइब्रेरी है)। मैं हमेशा जार फ़ाइल को अनजिप/ज़िप करने के बिना कॉन्फ़िगरेशन फ़ाइल को ट्विक करना चाहता हूं। असल में मैं यह पूछना भूल गया कि क्या मैं इसे एक और तरीके से पूरा कर सकता हूं :) – kunigami

+0

वह जानकारी प्रासंगिक है, इसलिए मैंने इसे प्रश्न में संपादित किया है। क्या तृतीय पक्ष एपीआई को निर्देश दिया जा सकता है (उदा। आपके ऐप द्वारा) संसाधन के लिए कहां देखना है? असल में जो मैं अग्रणी हूं, वह सुझाव दे रहा है कि इसे ऐप से न डालें। बिलकुल, लेकिन स्थिर और पुनरुत्पादित पथ में - जैसे 'user.home' की उप-निर्देशिका। –

+0

मैंने केवल उस बिट को देखा जो 'एप्लेट' कहता है। क्या यह वास्तव में एक एप्लेट है? यह चीजों को और जटिल बनाता है। –

उत्तर

8

सामान्यतः, हाँ यह कर सकता है। तकनीकी रूप से, वर्ग का ClassLoader पैरामीटर (see Javadoc here) में नामित संसाधन का पता लगाने के लिए उपयोग किया जाता है। यदि आप एक विशेष ClassLoader का उपयोग नहीं कर रहे हैं तो आपको बूटस्ट्रैप क्लास लोडर मिलेगा, जो क्लास पथ की खोज करता है। इसलिए, यदि आपके पास क्लासपाथ पर निर्देशिकाएं या अन्य जार फ़ाइलें हैं, तो उन्हें खोजा जाएगा।

1

यह कोई भी संसाधन मिलेगा जो उपयुक्त क्लासलोडर के लिए उपलब्ध है (वह getClass().getClassLoader() वापस आएगा)। क्या क्लासलोडर में app निर्देशिका और दोनों शामिल हैं, जार फ़ाइलें आपके शेष एप्लिकेशन संदर्भ पर निर्भर करती हैं।

0

एक तरह से वर्तमान निर्देशिका (How to get the path of a running JAR file?) प्राप्त करने के लिए नहीं है, लेकिन विन्यास के लिए आप सिर्फ विन्यास

संबंधित मुद्दे