2012-06-06 13 views
8

के अंदर से लोड हो रहा है मैंने getResourceAsStream के माध्यम से एक जार के भीतर किसी विशेष फ़ाइल को लोड करने के तरीके के बारे में कुछ जवाब देखा है, और मैं इसे प्रबंधित कर सकता हूं। हालांकि मुझे वास्तव में कुछ खास सामना करना पड़ रहा है, मुझे इस मंच पर इसके बारे में कोई जवाब नहीं मिला।संसाधन बंडल के साथ एक जार

मैं एक जार फ़ाइल एक conf निर्देशिका है कि 2 गुण होता messages_en_US.properties और messages_fr_FR.properties फ़ाइलें होने है:

यहाँ विन्यास है। ऐसे संसाधनों लोड करने के लिए शास्त्रीय तरीका

ResourceBundle.getBundle("messages", java.util.Locale.getDefault()); 

उपयोग करने के लिए यदि फ़ाइलें डिस्क पर थे, एक निर्देशिका programm classpath द्वारा संदर्भित में, इस ठीक काम करता है है। लेकिन मुझे नहीं पता कि मैं संसाधन Bundle.getBundle के उपयोग के संयोजन का प्रबंधन कैसे कर सकता हूं और एक जार को बुद्धिमान से संसाधनों का उपयोग कर सकता हूं। दरअसल, क्योंकि मुझे के माध्यम से कोई पुल नहीं मिल रहा है, GetResourceAsStream (या यह संपूर्ण संसाधन फ़ाइल नाम निर्दिष्ट करने के लिए स्वयं को लोकेल प्रबंधित करना होगा, जो बहुत स्मार्ट नहीं है)।

क्या कोई मदद कर सकता है?

धन्यवाद।

+0

तुम कहाँ है कि फाइल की क्या ज़रूरत है:

src |main |resources |com |xyz ....|message.properties 

इस फाइल को पढ़ने के लिए डब्बे में? यदि यह एक जेएआर में रहता है तो इसका मतलब है कि आपके पास क्लासपाथ में है और आपको इसे सामान्य रूप से ResourceBundle.getBundle – rascio

+0

के साथ लोड करने में समस्या नहीं होनी चाहिए। मेरे पास एक ही समस्या है, मेरे पास एक जार फ़ाइल के अंदर एक संपत्ति संसाधन है लेकिन वह जार फ़ाइल है प्रोग्राम क्लासपाथ में नहीं।मैंने PropertyResourceBundle के लिए javadoc पढ़ा है और मुझे पता है कि मैं इनपुटस्ट्रीम के साथ ऐसा कर सकता हूं लेकिन इनपुटस्ट्रीम का मतलब है IO यह फ़ाइल को हर बार पढ़ेगा और मैं डिफ़ॉल्ट संसाधन बंडल कैशिंग खो देता हूं। क्या रिसोर्सबंडल क्लास को उस संसाधन से बंडल प्राप्त करने का कोई तरीका है जो उसके क्लासपाथ के बाहर है? –

+0

इसके अलावा संसाधनबंडल.कंट्रोल को अनुकूलन के लिए कार्यान्वित किया जा सकता है लेकिन क्लासपाथ में संपत्ति फ़ाइलों को रखने के तरीके खोजने के लिए बेहतर है। –

उत्तर

1

क्या आपने यह कोशिश की है?

ResourceBundle.getBundle("conf/messages", java.util.Locale.getDefault()); 
10

यदि यह जार के अंदर एक conf निर्देशिका में है, तो बंडल आप लोड करने के लिए कोशिश कर रहे हैं के पैकेज conf है, और आप का उपयोग करना चाहिए

ResourceBundle.getBundle("conf.messages", java.util.Locale.getDefault()); 

The javadoc का कहना है:

baseName - the base name of the resource bundle, a fully qualified class name 
+0

3+ घंटे और आखिरकार इस जवाब ने मेरी जान बचाई। +1 – xyz

+0

जेएआर फ़ाइल का मतलब यह नहीं है कि इसे कक्षा में होना चाहिए। मुझे लगता है कि मूल लेखक क्लासपाथ के बाहर होने पर संसाधन बंडल तक पहुंचने का प्रयास कर रहा है। इंटरेस्ट रिसोर्सबंडल को इनपुटस्ट्रीम के साथ उपयोग करने का एक तरीका है, लेकिन फिर आप कैशिंग खो देते हैं और जब भी आप बंडल करते हैं तो आपको एक नया बंडल करना होता है। मेरे पास एक ही समस्या है, मेरे पास एक संसाधन है जो कक्षा में नहीं है। –

0

संसाधनबंडल हमेशा एक गुण फ़ाइल की खोज करता है, इसलिए, यदि आप चलाते हैं:

ResourceBundle.getBundle("messages", java.util.Locale.getDefault()); 

संसाधनबंडल आपके क्लासपाथ में "message.properties" की खोज करेगा।

0

फ़ाइल संदेशों को मानना ​​.properties कुछ xyz.jar का हिस्सा है जो पहले से ही प्रोजेक्ट के क्लासपाथ पर है जहां आप इसका उपयोग करना चाहते हैं। जार में इस फ़ाइल की पैकेजिंग के रूप में नीचे है:

import java.util.ResourceBundle; 

....

ResourceBundle.getBundle("com.xyz.resources.messages", Locale.getDefault()); 

धन्यवाद

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