2013-01-04 68 views
11

मैं कैसे classpath पर एक फ़ाइल का नाम बदल सकते हैं एक वास्तविक फ़ाइल नाम के लिए एक classpath फ़ाइल नाम कन्वर्ट?कोई वास्तविक फ़ाइल नाम

उदाहरण के लिए, मान लीजिए कि निर्देशिका "C:\workspace\project\target\classes" अपने classpath पर कर रही है। उस निर्देशिका में एक फ़ाइल है, जैसे info.properties

आप info.properties फ़ाइल के पूर्ण फ़ाइल पथ को निर्धारित (रनटाइम) पर कैसे निर्धारित करेंगे, केवल स्ट्रिंग "info.properties" दिए गए हैं?

परिणाम "C:\workspace\project\target\classes\info.properties" की तरह कुछ होगा।

यह उपयोगी क्यों है? जब इकाई परीक्षण लेखन, आप अपने परीक्षण संसाधनों (src/main/resources) में बंडल फ़ाइलों तक पहुँच सकते हैं, लेकिन एक तीसरी पार्टी पुस्तकालय या अन्य प्रणाली है कि एक सच्चे फ़ाइल नाम, नहीं एक रिश्तेदार classpath संदर्भ की आवश्यकता है के साथ काम कर रहे हैं।

नोट: मैं इस सवाल अपने आप उत्तर दिया है, के रूप में मुझे लगता है यह एक उपयोगी चाल है, लेकिन ऐसा लगता है कि कोई भी कभी भी पहले इस प्रश्न पूछा गया है।

उत्तर

16

ClassLoader.getResource() और URL.getFile() विंडोज के लिए

URL url = Thread.currentThread().getContextClassLoader().getResource(resource); 
if(url == null){ 
    throw new RuntimeException("Cannot find resource on classpath: '" + resource + "'"); 
} 
String file = url.getFile(); 

नोट का एक संयोजन का उपयोग करें: ऊपर के उदाहरण में, वास्तविक परिणाम

"/C:/workspace/project/target/classes/info.properties" 

तो हो जाएगा आपको एक और विंडोज़ जैसे पथ की आवश्यकता है (यानी "C:\workspace\..."), उपयोग करें:

String nativeFilename = new File(file).getPath(); 
+5

संसाधन अगर एक जार के अंदर है तो यह क्या उत्पादन करेगा? 'फ़ाइल:/सी: /tools/some/path/jarfile.jar/आंतरिक/path/file.txt'! – radai

+1

@radai यहाँ एक जार में एक फ़ाइल के लिए परिणाम का एक उदाहरण है। ऊपर दिए गए उत्तर का उपयोग करके ऐसी फ़ाइल ढूंढने के लिए, आपको जार रूट से संबंधित पथ प्रदान करना होगा - यानी। '" आंतरिक/पथ/file.txt "' – GreenGiant

+0

@radai यह भी जांचें [यह] (http://stackoverflow.com/questions/12025689/filenotfoundexception-when-exporting-jar/12025740#12025740) –

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

  • कोई संबंधित समस्या नहीं^_^