2012-06-28 6 views
15

मैं मुख्य वर्ग के लिए निम्न पथ संरचना है:क्लास फ़ोल्डर के बाहर जावा में गुण फ़ाइल को कैसे पढ़ा जाए?

D:/java/myapp/src/manClass.java 

और मैं गुण

D:/java/myapp/config.properties 

जो एक फ़ाइल नाम और कुछ अन्य विन्यास में शामिल होंगे में फ़ाइल रखना चाहते हैं। मैं फ़ाइल नाम सेट करेंगे गुण इस तरह फ़ाइल में: file=file_to_read.txt

इस file_to_read.txtD:/java/myapp/folder_of_file/

में स्थित होगा से गुण पहले फाइल मुख्य वर्ग फ़ाइल नाम पढ़ा जाएगा और उसके बाद सामग्री फ़ाइल के रूप में मिलता है ।

मैं यह कर सकता है, तो config.properties और file_to_read.txt दोनों mainClass.java साथ src/ में हैं। लेकिन जिस तरह से मैं इसे करना चाहता हूं उसके साथ सफल नहीं हो सका।

क्या कोई इस से मेरी सहायता कर सकता है? मुझे आपके सुझाव की आवश्यकता है कि मैं क्या कर सकता हूं यदि मैं अपने ड्राइव में कहीं भी myapp फ़ोल्डर को उसी आंतरिक संरचना के साथ रखना चाहता हूं जिसमें मैंने ऊपर वर्णित किया है और कार्यक्रम सही ढंग से काम करेगा।

मुझे आपके सुझाव की भी आवश्यकता है कि अगर मैं परियोजना के निर्माण के बाद बनाए गए जार से नौकरी करना चाहता हूं तो क्या मैं बिना किसी समस्या के कर सकता हूं?

मैं के रूप में की कोशिश की है बस गुण फ़ाइल को पढ़ने के लिए निम्नलिखित:

 URL location = myClass.class.getProtectionDomain().getCodeSource().getLocation(); 

     String filePath = location.getPath().substring(1,location.getPath().length()); 

     InputStream in = myClass.class.getResourceAsStream(filePath + "config.properties"); 
     prop.load(in); 

     in.close(); 

     System.out.println(prop.getProperty("file")); 

लेकिन इस गलती जब getProperty करने की कोशिश की से गुण फ़ाइल देता है। धन्यवाद!

उत्तर

0

आप रनटाइम क्लासपाथ में कॉन्फ़िगरेशन फ़ाइल निर्देशिका जोड़ सकते हैं, तो आप इसे Class.getResourceAsStream() से एक्सेस कर सकते हैं।

28

कैसे एक गुण कक्षा फ़ोल्डर बाहर से जावा में फ़ाइल को पढ़ने के लिए?

एक निश्चित डिस्क फ़ाइल सिस्टम पथ के साथ FileInputStream का उपयोग करें।

InputStream input = new FileInputStream("D:/java/myapp/config.properties"); 

बहुत बेहतर बस बजाय classpath के अंतर्गत आने वाले मौजूदा पथ में से एक करने के लिए ले जाने के लिए, या classpath करने के लिए अपने मूल पथ D:/java/myapp/ जोड़ना है। इस प्रकार तो फिर तुम इसे पाने के कर सकते हैं: अपने सुझाव के लिए

InputStream input = getClass().getResourceAsStream("/config.properties"); 

या

InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties"); 
+1

हां, बलुस के पहले समाधान का उपयोग करें। – Klinetel

+0

धन्यवाद, यह मेरे लिए काम किया। लेकिन, मुझे एक टिप्पणी जोड़ने की जरूरत है। यदि आप क्लासपाथ में फ़ोल्डर जोड़ते हैं, तो संसाधन को स्ट्रीम के रूप में प्राप्त करते समय आपको फ़ोल्डर निर्दिष्ट करने की आवश्यकता नहीं है, इसका मतलब है कि आप केवल getResourceAsStream ("/ config.properties") को कॉल करते हैं, भले ही वह फ़ाइल किसी फ़ोल्डर में स्थित हो संसाधन –

+1

@ जेसस: हां, फ़ोल्डर की सामग्रियों का उपयोग उसी तरह के अन्य फ़ोल्डरों में पहले से ही (डिफ़ॉल्ट) क्लासपाथ में करने का इरादा है। – BalusC

6

धन्यवाद सब लोग। मैं इस तरह से काम किया है:

 Properties prop = new Properties(); 
     String dir = System.getProperty("user.dir"); 
     InputStream in = new FileInputStream(dir + "/myapp/config.properties"); 
     prop.load(in); 
     in.close(); 
     String filePath = dir + "/myapp/folder_of_file/" + prop.getProperty("file"); /*file contains the file name to read*/ 
+1

यह वास्तव में पोर्टेबल नहीं है, या आपको इसे अपने ऐप की स्थापना मार्गदर्शिका में बहुत स्पष्ट रूप से दस्तावेज करना चाहिए। क्लासपाथ में डालने या क्लासपाथ में अपना रास्ता जोड़ना इतना आसान है। – BalusC

+0

@ बाल्लूसी, अगर मैं रन टाइम के दौरान संपत्ति फ़ाइल को संपादित करना चाहता हूं तो क्या होगा? – gdrt

0

आप निरपेक्ष पथ निर्दिष्ट करने की आवश्यकता है, लेकिन आपको लगता है कि के रूप में कड़ी मेहनत से कोड यह विकास और उत्पादन वातावरण आदि के बीच स्विच करने के लिए यह मुश्किल कर देगा नहीं करना चाहिए ..

आपको सिस्टम प्रॉपर्टी से फ़ाइल का मूल पथ मिल सकता है जिसे आप अपने कोड में System.getProperty ("बेसपाथ") का उपयोग करके एक्सेस कर सकते हैं और जिसे पूर्ण पथ बनाने के लिए आपके फ़ाइल नाम में प्रीपेड किया जाना चाहिए ।

आपके आवेदन आप जावा कमांड लाइन में पथ का अनुसरण के रूप में निर्दिष्ट कर सकते हैं चल रहा है जबकि:

java -DbasePath="https://stackoverflow.com/a/b/c" ... 

... अपने जावा आदेश अपने कार्यक्रम चलाने के लिए करने के लिए वर्तमान तर्क का प्रतीक है।

2
Properties property=new Properties(); 
property.load(new FileInputStream("C:/java/myapp/config.properties")); 
संबंधित मुद्दे