2013-04-12 6 views
5

पर काम नहीं कर रहे JAR के भीतर से फ़ाइल पढ़ना मैं एक जेएआर के अंदर पैक की गई फ़ाइल से पढ़ने की कोशिश कर रहा हूं, जो इसे पढ़ता है। ऐसा करने के लिए, मैं निम्नलिखित का उपयोग करें:विंडोज़

getClass().getClassLoader().getResourceAsStream(file) 

यह ठीक काम करता है जब मैं बना सकते हैं और पर OSX JAR फ़ाइल को चलाने, लेकिन अगर मैं बना सकते हैं और खिड़कियों पर JAR फ़ाइल को चलाने, ऊपर लाइन अशक्त देता है।

क्या मुझे यहां कुछ याद आ रही है? अगर मैं ओएसएक्स पर जेएआर बनाता हूं और इसे विंडोज़ पर चलाता हूं तो यह ठीक काम करता है। समस्या तब होती है जब मैं विंडोज़ पर जार बना देता हूं।

संपादित करें: यह उल्लेखनीय है कि JAR फ़ाइल में कोई फ़ोल्डर पदानुक्रम नहीं है। सबकुछ एक स्तर पर संग्रहीत होता है, इस प्रकार कक्षा को फ़ाइल पढ़ने और फ़ाइल ही एक ही निर्देशिका में होती है। साथ ही, इस है कि कैसे मैं JAR फ़ाइल बनाने रहा हूँ, दोनों OSX और Windows पर:

jar -cmf manifest.mf run.jar *.class file1 file2 

संपादित करें 2: फ़ाइल मैं लोड करने के लिए कोशिश कर रहा हूँ एक जावा .properties फ़ाइल है। मैं इसे लेता हूं जो इस मुद्दे को उत्पन्न नहीं कर रहा है?

+0

जार फ़ाइलें ज़िप फ़ाइलें हैं, इसलिए आप इसका उपयोग विंडोज-निर्मित संस्करण को सत्यापित करने के लिए कर सकते हैं। इसे .zip के साथ नाम बदलें और फिर विंडोज एक्सप्लोरर के साथ ब्राउज़ करें। –

+0

@NathanielWaisbrot सत्यापित करें कि वास्तव में क्या? क्या फाइलें सब वहाँ हैं? मैंने इसे चेक किया है (इसके बजाए जार-टीएफ का उपयोग करके), और वे निश्चित रूप से वहां मौजूद हैं, जिस संरचना में मैंने – Kumalh

+0

में वर्णित संरचना में वर्णित किया है, आप कहते हैं कि मैक पर निर्मित एक जार विंडोज पर काम करता है, लेकिन विंडोज़ पर बनाया गया एक जार काम नहीं करता दो जार फ़ाइलों की सामग्री को डिफ करें। यदि आप जावा के समान संस्करण का उपयोग कर रहे हैं, तो मुझे लगता है कि .class फ़ाइलों को समान होना चाहिए। –

उत्तर

0

क्लासलोडर भाग छोड़ें। बस getClass()। GetResource ....

+0

मैं 'classloader.getSystemResource()' –

+0

मैंने कोशिश की थी। वही परिणाम: विंडोज़ पर नहीं, ओएसएक्स पर काम करता है। मैंने 'this.getClass() प्राप्त किया। GetResourceAsStream (" \ file "); ', लेकिन यह – Kumalh

+0

आहा काम नहीं करता! किसी भी पथ विभाजक का प्रयोग न करें। बस फ़ाइल का नाम। –

0

इस तरह से कोशिश करें getClass()। GetResourceAsStream ("/ file1")।

-1

फ़ाइल विभाजक का उपयोग करते समय, उन्हें हार्ड कोड न दें! इसके बजाय java.io.File.separator का उपयोग करें: http://docs.oracle.com/javase/7/docs/api/java/io/File.html#separator

+0

File.pathSeparator ओएस एक्स पर सेमी-कोलन लौटाता है, जिसका उपयोग आपके द्वारा उपयोग किए जाने वाले उपयोग के लिए नहीं है। File.separator स्लैश देता है और इसलिए उपयोग करने वाला एक है। – user3856210