2013-06-27 5 views
42

में फ़ाइल/संसाधन फ़ोल्डर में फ़ाइल करने के लिए पूर्ण पथ कैसे प्राप्त करें मानक मैवेन सेटअप मानें।अपनी परियोजना

अपने संसाधन फ़ोल्डर में कहें कि आपके पास फ़ाइल abc है।

जावा में, मैं फ़ाइल के लिए पूर्ण पथ कैसे प्राप्त कर सकता हूं?

+0

क्या आप एक मेवेन प्लगइन लिखना चाहते हैं? या जब आप अपना प्रोग्राम निष्पादित करते हैं तो आप फ़ाइल तक पहुंचना चाहते हैं? –

+0

संबंधित: http://stackoverflow.com/questions/8136891/getting-absolute-path-of-a-file-loaded-via-classpath – Vadzim

उत्तर

14

आप एक File वस्तु बना सकते हैं और getAbsolutePath विधि का उपयोग कर सकते हैं:

File file = new File("resources/abc.txt"); 
String absolutePath = file.getAbsolutePath(); 
+5

सीमित उपयोग की एक सलाह, क्योंकि यह कार्यशील निर्देशिका पर निर्भर करता है जड़। और फिर भी, आपको फ़ाइल को संदर्भित करने के लिए 'लक्ष्य/कक्षाएं/abc.txt' का उपयोग करना चाहिए, क्योंकि यह कैननिकल स्थान है जहां मैवेन प्रसंस्करण के बाद संसाधन फ़ाइलों को रखता है (उदाहरण के लिए, मैवेन-संसाधन प्लगइन ने संपत्ति प्रतिस्थापन किया हो सकता है abc.txt)। क्लासपाथ से getResource() के माध्यम से abc.txt का उपयोग करना बेहतर है। –

+1

क्या होगा यदि कोई अंतिम उपयोगकर्ता आपके आवेदन को निष्पादन योग्य JAR के रूप में चला रहा हो? तब बिल्कुल एक भौतिक फाइल नहीं होगी। यह एक और कारण है कि आपको getResource(), और उदा। आप इसके साथ क्या करना चाहते हैं इसके आधार पर इसे खोलें इनपुट स्ट्रीम। –

+4

क्या इसे सही उत्तर के रूप में हटाया जा सकता है? @ करोल एस ने नीचे जवाब दिया - यह सही उत्तर होना चाहिए (इसलिए अपवित्र विसंगति) – DanGordon

104

उचित तरीके है कि वास्तव में काम करता है:

URL resource = YourClass.class.getResource("abc"); 
Paths.get(resource.toURI()).toFile(); 

यह नहीं है बात अब जहां classpath में फ़ाइल शारीरिक रूप से है , यह तब तक मिलेगा जब संसाधन वास्तव में एक फ़ाइल है और एक जेएआर प्रविष्टि नहीं है।

(प्रतीत होता है स्पष्ट new File(resource.getPath())! सभी पथों के लिए काम नहीं करता है का रास्ता अब भी URL- एनकोडेड है!)

+3

द्वारा देखें या संभवतः आप केवल यह कर सकते हैं: 'नई फ़ाइल (resource.toURI())। GetAbsolutePath();' (यानी मुझे नहीं लगता कि आपको पथ वस्तु की आवश्यकता है?) –

+1

के बारे में अच्छी युक्ति toURI(), यह आपके रास्ते में रिक्त स्थान से बचाता है जो% 20 के रूप में आ रहा है! –

+17

धन्यवाद! यह लगभग मेरे लिए काम किया। लेकिन मुझे एक बदलाव करना पड़ा: YourClass.class.getClassLoader()। GetResource ("abc"); – yngwietiger

11

आप पथ specifie चाहिए /

URL resource = YourClass.class.getResource("/abc"); 
Paths.get(resource.toURI()).toFile(); 
5

से शुरू की classloader इंस्टेंस बनाएं जिस वर्ग की आपको आवश्यकता है, फिर आप फ़ाइलों या संसाधनों को आसानी से एक्सेस कर सकते हैं। अब आप उस कक्षा के getPath() विधि का उपयोग कर पथ तक पहुंच सकते हैं।

ClassLoader classLoader = getClass().getClassLoader(); 
String path = classLoader.getResource("chromedriver.exe").getPath(); 
System.out.println(path); 
संबंधित मुद्दे