उदाहरण के लिए, यह स्निपेट stream.read()
लाइन पर एक NullPointerException (!) फेंकता है, मानते हैं कि com.google पैकेज कहीं भी एक जार में मौजूद है (उदाहरण के लिए, गुवा)। com/google
एक पैकेज एक जार फाइल सिस्टम के बजाय में है कि के साथ बदली हैक्या यह बताने का कोई तरीका है कि क्लासपाथ संसाधन फ़ाइल या निर्देशिका है या नहीं?
ClassLoader classLoader = getClass().getClassLoader();
URL resource = classLoader.getResource("com/google");
InputStream stream = resource.openStream();
System.out.println(stream.toString()); // Fine -- stream is not null
stream.read(); // NPE inside FilterInputStream.read()!
, तो टुकड़ा सब पर दुर्घटना नहीं है। असल में, ऐसा लगता है कि उस निर्देशिका में फ़ाइलों को नई लाइनों से अलग किया गया है, हालांकि मैं कल्पना नहीं कर सकता कि व्यवहार कहीं भी निर्दिष्ट है।
क्या संसाधन पथ "com/google" को "सामान्य" संसाधन फ़ाइल या निर्देशिका में इंगित करने का कोई तरीका है?
'कोशिश {stream.read(); System.out.println ("यह फाइल सिस्टम पर है!"); } पकड़ो (NullPointerException npe) {System.out.println ("यह एक जार में है!"); } ' –
@AdrianPetrescu मैं क्लासपाथ निर्देशिकाओं और फ़ाइलों के बीच अंतर करना चाहता हूं, न कि" एक JAR में फ़ाइलें "और" फ़ाइल सिस्टम पर फ़ाइलें या निर्देशिका "। इसके अलावा मैं अनियंत्रित किसी भी चीज़ पर भरोसा नहीं करना चाहूंगा। –