मानक मावेन सेटअप मान लें।
अपने संसाधन फ़ोल्डर में कहें कि आपके पास एक फ़ाइल है abc।
जावा में, मैं कृपया फ़ाइल को पूर्ण पथ कैसे प्राप्त कर सकता हूं?
मानक मावेन सेटअप मान लें।
अपने संसाधन फ़ोल्डर में कहें कि आपके पास एक फ़ाइल है abc।
जावा में, मैं कृपया फ़ाइल को पूर्ण पथ कैसे प्राप्त कर सकता हूं?
जवाबों:
आप ClassLoader.getResourceसही संसाधन प्राप्त करने के लिए विधि का उपयोग कर सकते हैं ।
URL res = getClass().getClassLoader().getResource("abc.txt");
File file = Paths.get(res.toURI()).toFile();
String absolutePath = file.getAbsolutePath();
या
हालांकि यह हर समय काम नहीं कर सकता है, एक सरल समाधान -
आप एक Fileवस्तु और उपयोग getAbsolutePathविधि बना सकते हैं :
File file = new File("resources/abc.txt");
String absolutePath = file.getAbsolutePath();
target/classes/abc.txtफ़ाइल को संदर्भित करने के लिए उपयोग करना चाहिए , क्योंकि यह कैनोनिकल जगह है जहां मावेन प्रसंस्करण के बाद संसाधन फ़ाइलें डालता है (उदाहरण के लिए, मावेन-संसाधन प्लगइन ने शायद abc.txt पर संपत्ति प्रतिस्थापन किया है)। Classpath से getResource () के माध्यम से abc.txt का उपयोग करना बेहतर है।
उचित तरीका जो वास्तव में काम करता है:
URL resource = YourClass.class.getResource("abc");
Paths.get(resource.toURI()).toFile();
इससे कोई फर्क नहीं पड़ता कि भौतिक रूप से क्लासपाथ में फ़ाइल कहाँ है, यह तब तक पाया जाएगा जब तक कि संसाधन वास्तव में एक फ़ाइल नहीं है और JAR प्रविष्टि नहीं है।
(स्पष्ट रूप से स्पष्ट new File(resource.getPath())सभी रास्तों के लिए काम नहीं करता है! पथ अभी भी URL-एन्कोडेड है!)
new File(resource.toURI()).getAbsolutePath();(यानी मुझे नहीं लगता कि आपको पथ वस्तु की आवश्यकता है?)
new File(YourClass.class.getResource("abc").toURI().getPath())यदि आप चाहते तो आप वैकल्पिक रूप से कर सकते थे।
.getResource("/abc")
जिस वर्ग की आपको आवश्यकता है, उसका क्लास-बेडर उदाहरण बनाएं, फिर आप फ़ाइलों या संसाधनों तक आसानी से पहुँच सकते हैं। अब आप getPath()उस वर्ग की विधि का उपयोग करके पथ तक पहुँचते हैं ।
ClassLoader classLoader = getClass().getClassLoader();
String path = classLoader.getResource("chromedriver.exe").getPath();
System.out.println(path);
किसी फ़ाइल या फ़ाइलपथ पर लौटने के लिए
URL resource = YourClass.class.getResource("abc");
File file = Paths.get(resource.toURI()).toFile(); // return a file
String filepath = Paths.get(resource.toURI()).toFile().getAbsolutePath(); // return file path
निरपेक्ष मार्ग के लिए हमारे रास्ते में दो समस्याएं हैं:
निम्नलिखित कोड हमें सभी उपयोगी रास्ते देगा:
URL localPackage = this.getClass().getResource("");
URL urlLoader = YourClassName.class.getProtectionDomain().getCodeSource().getLocation();
String localDir = localPackage.getPath();
String loaderDir = urlLoader.getPath();
System.out.printf("loaderDir = %s\n localDir = %s\n", loaderDir, localDir);
यहां संसाधन फ़ोल्डर के स्थानीयकरण के लिए उपयोग किए जा सकने वाले दोनों कार्यों पर शोध किया जाता है। जैसा कि class, यह किसी भी तरह से, सांख्यिकीय या गतिशील रूप से प्राप्त किया जा सकता है।
यदि परियोजना प्लगइन में नहीं है, तो कोड जो जुनाइट में चलता है, प्रिंट होगा:
loaderDir = /C:.../ws/source.dir/target/test-classes/
localDir = /C:.../ws/source.dir/target/test-classes/package/
तो, src / rest / resource को प्राप्त करने के लिए हमें फ़ाइल ट्री के ऊपर और नीचे जाना चाहिए। दोनों तरीकों का इस्तेमाल किया जा सकता है। ध्यान दें, हम उपयोग नहीं कर सकते getResource(resourceFolderName), उस फ़ोल्डर के लिए लक्ष्य फ़ोल्डर में नहीं है। कोई भी बनाए गए फ़ोल्डर में संसाधन नहीं डालता है, मुझे उम्मीद है।
यदि क्लास उस पैकेज में है जो प्लगइन में है, उसी टेस्ट का आउटपुट होगा:
loaderDir = /C:.../ws/plugin/bin/
localDir = /C:.../ws/plugin/bin/package/
इसलिए, फिर से हमें फ़ोल्डर ट्री के ऊपर और नीचे जाना चाहिए।
सबसे दिलचस्प मामला है जब पैकेज को प्लगइन में लॉन्च किया जाता है। JUnit प्लगइन परीक्षण के रूप में, हमारे उदाहरण के लिए। आउटपुट है:
loaderDir = /C:.../ws/plugin/
localDir = /package/
यहां हम दोनों कार्यों के परिणामों को मिलाकर ही पूर्ण मार्ग प्राप्त कर सकते हैं । और यह पर्याप्त नहीं है। उन दोनों के बीच हमें उस स्थान का स्थानीय पथ रखना चाहिए जहां कक्षाएं पैकेज हैं, अपेक्षाकृत प्लगइन फ़ोल्डर में। संभवतः, आपको यहां srcया इसके साथ कुछ डालना होगा src/test/resource।
आप कोड को अपने में सम्मिलित कर सकते हैं और आपके पास जो रास्ते हैं उन्हें देख सकते हैं।