2012-07-31 16 views
44

क्या इस कक्षा के कोड से निष्पादित कक्षा के वर्तमान फाइल सिस्टम स्थान को रनटाइम में निर्धारित करने का कोई तरीका है, क्योंकि यह java कमांड का उपयोग करके निष्पादित किया गया है?कक्षा के फाइल सिस्टम को निष्पादित किया जा रहा है

निम्नलिखित वर्ग के लिए उदाहरण के लिए:

public class MyClass{ 
public static void main(String[] args){\ 
    new MyClass().doStuff(); 
} 

private void doStufF(){ 
    String path = ... // what to do here?! 
    System.out.println("Path of class being invoked: " + path); 
} 

} 

वहाँ किसी भी तरह से मिलता है और MyClass.class फ़ाइल के फ़ाइल में सही पथ मुद्रित करने के लिए है बस लागू किया जा रहा?

इसी तरह, अगर मैं java -jar आदेश से जार फ़ाइल आह्वान, वहाँ किसी भी तरह से है कि जार के अंदर वर्गों के भीतर से जार फ़ाइल के लिए एक रास्ता पाने के लिए है?

पीएस: कृपया, कार्यशील निर्देशिका के बारे में कोई धारणा न करें, जिससे java कमांड लागू किया गया है!

उत्तर

68

निम्नलिखित कोड का टुकड़ा आपके लिए यह कर देगा:

final File f = new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath()); 

अपने main वर्ग के साथ MyClass की जगह

File वस्तु जिसके परिणामस्वरूप f.jar फ़ाइल है कि मार डाला गया था प्रतिनिधित्व करता है। .jar निर्देशिका में खोजने के लिए आप इस ऑब्जेक्ट का उपयोग कर सकते हैं।

+5

ऐसा करने से सावधान रहें: यदि आपकी कक्षा फ़ाइल उस निर्देशिका में कहीं है जहां इसमें कोई स्थान है, तो लौटाई गई स्ट्रिंग (जो कि है एक यूआरएल का पथ हिस्सा, जो मिलता है स्थान() रिटर्न, और इसलिए यूआरएल एन्कोड किया गया है) में रिक्त स्थान के बजाय '% 20' होगा! –

+1

@JandeVos 'फ़ाइल (java.net.URI)' कन्स्ट्रक्टर का उपयोग करके उस समस्या को ठीक करने लगता है। – Spooky

+0

@ स्पूकी की टिप्पणी: तो यह 'अंतिम फ़ाइल f = नई फ़ाइल (MyClass.class.getProtectionDomain() होनी चाहिए। GetCodeSource()। GetLocation()। GetURI()। GetPath()); ' –

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