2011-12-26 27 views
6

मुझे जावा प्रश्न है कि मुझे इसमें कोई समस्या है: सापेक्ष फ़ाइल पथ इंगित करने का एक अच्छा तरीका क्या है।जावा सापेक्ष फ़ाइल पथ

मुझे और अधिक विशिष्ट होने दें। मैं हमेशा ./configuration/file.txt में कॉन्फ़िगरेशन फ़ाइलों को देखने के लिए कहने में सक्षम होना चाहता हूं। मेरी समस्या यह है कि मेरा प्रोग्राम केवल तभी काम करेगा जब यह फ़ाइल निर्देशिका में से शुरू होता है। अगर इसके बजाय मैं इसे ./directory/to/my/program/execute.sh जैसी किसी भिन्न निर्देशिका से शुरू करता हूं तो यह सही तरीके से कार्य करने में विफल रहता है।

लेकिन मैं यह भी इस फ़ाइल में परिवर्तन करने की जरूरत है, और संसाधनों केवल पढ़ने के लिए करना चाहते हैं लगता है ...

+0

क्या आपका मतलब '/ config/file.txt' के बजाय'।/config/file.txt' था। दूसरा पथ पूर्ण है और किसी समस्या का कारण नहीं बनना चाहिए। –

+0

thx अच्छी पकड़, टाइपो –

+0

को सही किया गया है यदि आप कॉन्फ़िगरेशन सेटिंग्स को संशोधित करने की क्षमता की आवश्यकता है तो आप संसाधन में * वास्तविक * कॉन्फ़िगरेशन फ़ाइल को पूर्ण पथ डाल सकते हैं। –

उत्तर

3

आप एक वातावरण चर के माध्यम से एक निर्देशिका को परिभाषित करने, जैसे के लिए एक तंत्र प्रदान करने की आवश्यकता है, एक कमांड लाइन तर्क, कॉन्फ़िगरेशन फ़ाइल, प्राथमिकता API, आदि

7

सुझाए गए (ताकि ऐप पर्यावरण विशिष्ट विवरण से स्वतंत्र हो) कॉन्फ़िगरेशन जानकारी पढ़ने के लिए इसे क्लासपाथ संसाधन के बजाय पढ़ना है एक फाइल सिस्टम संसाधन। अधिक जानकारी के लिए Smartly load your properties पढ़ें।

पढ़ें Class.getResourceAsStream javadoc कैसे इतने पर संसाधन पथ

उपयोगी पोस्ट को निर्दिष्ट करने के वाक्य रचना के लिए: Classpath resource within jar

2

आप /configuration/file.txt चाहते हैं कुछ करने के लिए फ़ाइल रिश्तेदार निरूपित करने के लिए, तो आपको क्या लगता है कि कुछ को परिभाषित करने के है। हम आमतौर पर कुछ "क्लासपाथ या वर्तमान निर्देशिका" होने देते हैं। यद्यपि उस काम को करने के लिए आपको कुछ कोड लिखना होगा। निम्नलिखित की पंक्तियों के साथ कुछ (परीक्षण नहीं किया गया)।

public InputStream getResource(String path) throws IOException { 
    // try relative to current directory 
    File file = new File(path); 
    if (file.exists()) { 
    return new FileInputStream(file); 
    } 
    // try the classpath 
    return Thread.currentThread().getContextClassLoader().getResourceAsStream(path); 
} 
3

यह सुनिश्चित करने के लिए कि आपका डेटा हमेशा एक ही स्थान पर है, आप होम निर्देशिका का उपयोग कर सकते हैं। होम निर्देशिका का इस्तेमाल कर रही आप विभिन्न प्लेटफार्मों भर में कुछ स्थिरता दे देंगे और अपने कार्यक्रम निर्देशिका उस में है की परवाह किए बिना डेटा तक पहुँच सकते

उदाहरण के लिए:।

String userHomeDir = System.getProperty("user.home", "."); 
String systemDir = userHomeDir + "/.collection"; 

और फिर आप एक फ़ाइल प्राप्त कर सकते हैं बाद में कुछ

String fileLocation = systemDir + "/file.txt"; 
+0

यह भी देखें [यह उत्तर] (http://stackoverflow.com/a/5052359/418556)। –

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