2010-01-20 12 views
5

के रूप में एक JAR संसाधन खोलना मेरे पास एक प्रोजेक्ट है जहां मैं किसी अन्य प्रोजेक्ट से JAR में किसी संसाधन को एक्सेस करना चाहता हूं। यह मेरे क्लासपाथ पर नहीं है, इसलिए क्लासलोडर एक विकल्प नहीं है। मैंने कोशिश की:फ़ाइलस्ट्रीम

 

new FileInputStream("C:\\mydir\\my.jar!\\myresource.txt"); 
 

और एक फ़ाइलNotFoundException प्राप्त हुआ।

जारइनपूटस्ट्रीम एक संभावना हो सकती है, लेकिन मैं इनपुट फ़ाइल नाम की लचीलापन एक जार संसाधन या सिस्टम पर एक फ़ाइल (उपयोगकर्ता निर्णय लेता हूं) चाहता हूं। क्या कोई कक्षा है जो ऐसा कर सकती है या क्या मुझे खुद को बनाना है?

+1

यह सुनिश्चित नहीं करता कि यह मदद करता है, लेकिन जार फ़ाइलें मूल रूप से ज़िप फ़ाइलें हैं, इसलिए यदि आप किसी ज़िप फ़ाइल से कुछ पढ़ सकते हैं तो आप इसे एक जार से पढ़ सकते हैं - शायद यह आपकी खोज का विस्तार करने में मदद करता है। –

+1

@ मार्क - जेएआर फाइल अनिवार्य रूप से ज़िप फाइलें हैं, लेकिन केवल इस पल के लिए। अफवाह यह है कि जावा प्रारूप में जेएआर प्रारूप बदल रहा है। उम्मीद है कि उपयुक्त अमूर्त कक्षाओं का उपयोग भविष्य में सबूत होगा जो किसी भी जेएआर मैनिपुलेशन कोड ('java.util.jar' पैकेज देखें)। – McDowell

उत्तर

0

URLClassLoader का उपयोग करने का प्रयास करें। मैंने पहले ऐसा कुछ किया है, और ऐसा लगता है (हालांकि यदि आप सुरक्षित JVM में हैं तो आपको अपनी सुरक्षा नीति फ़ाइल के साथ मिलना पड़ सकता है)।

0

java.net.JarURLConnection

यूआरएल url = नया URL ("जार उपयोग करके देखें:

यहाँ एक नज़र सी: \ mydir \ my.jar \ myresource.txt ");

JarURLConnection jarConnection = (JarURLConnection) url.openConnection(); ऊपर कई के काम पर

0
private InputStream twistLid(File jar, String resource) throws IOException { 
    return new URL("jar:" + jar.toURI() + "!" + resource).openStream(); 
    } 
0

भवन, यहाँ ग्रूवी में एक उदाहरण है, पाठ एक जार फ़ाइल के रूट स्तर पर 'reources' नाम का एक फ़ोल्डर के अंदर 'resource.txt' में निहित लिस्टिंग

import java.io.* 
import java.util.* 
import java.util.jar.* 

def getJarResourceAsStream(String jarName, String resource) throws IOException { 
    def resourceStr = 'jar:' + (new File(jarName)).toURI() + '!' + resource 
    return new URL(resourceStr).openStream() 
} 

def inputStream = getJarResourceAsStream('/some/file/path/myJar.jar', '/resources/resource.txt') 

def reader = new InputStreamReader(inputStream) 
BufferedReader buffer = new BufferedReader(reader) 
String line 
while((line = buffer.readLine()) != null) { 
    System.out.println(line) 
} 
संबंधित मुद्दे