2011-09-29 10 views
6

मैं ग्रहण अनुप्रयोग में फ़ाइल लोड करने के लिए Class.getResource("rsc/my_resource_file.txt") का उपयोग करने का प्रयास कर रहा हूं।Class.getResource() मेरे ग्रहण आवेदन में शून्य वापस आता है? क्लासपाथ कॉन्फ़िगर नहीं कर सकता?

.../ग्रहण/plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.pkc

: हालांकि, कोई बात नहीं क्या मैं ग्रहण में क्या classpath हमेशा ग्रहण लांचर के लिए केवल एक प्रविष्टि शामिल

मैं कक्षापथ को कैसे कॉन्फ़िगर कर सकता हूं?

नोट: क्रम में मैं निम्नलिखित कोड के साथ classpath का निर्धारण कर रहा हूँ:

URLClassLoader cl = (URLClassLoader) ClassLoader.getSystemClassLoader(); 
for (URL classpathURL : cl.getURLs()) { 
    System.out.println(classpathURL); 
} 

संपादित करें: अधिक जानकारी।

समस्या की जड़ यह है कि Class.getResource("rsc/my_resource_file.txt") शून्य लौट रहा है। एक साधारण 5 लाइन "जावा एप्लिकेशन" में कुछ छोटे प्रयोग किए जाने के बाद मैंने सोचा कि मैंने इसे समझ लिया है और यह समस्या क्लासपाथ से संबंधित थी। स्पष्ट रूप से क्लासपाथ "ग्रहण अनुप्रयोग" के साथ थोड़ा अलग व्यवहार करता है। मैंने Class.getResource("/rsc/my_resource_file.txt") धन्यवाद बलससी द्वारा समस्या हल की।

+1

क्या आप कृपया एक कदम वापस ले सकते हैं? आपकी ठोस समस्या यह है कि संसाधन 'शून्य' देता है, है ना? क्या आप वाकई सही हैं? जैसा कि आपके पास है, यह वर्तमान वर्ग के पैकेज के सापेक्ष है। पथ रूट के सापेक्ष होने के लिए पथ '/' से शुरू नहीं होना चाहिए? कम से कम, ग्रहण लॉन्चर यहां दोष नहीं देना है। – BalusC

+0

@ बलुससी - आप सही हैं, मैंने सोचा था/फाइल सिस्टम पर एक पूर्ण पथ होगा। यदि आप इसे उत्तर के रूप में देते हैं तो मैं इसे स्वीकार करूंगा। – Buttons840

+0

मैंने एक उत्तर पोस्ट किया। क्लासपाथ को स्थानीय डिस्क फ़ाइल सिस्टम से भ्रमित नहीं किया जाना चाहिए। – BalusC

उत्तर

8

कृपया एक कदम पीछे लें। आपकी ठोस समस्या यह है कि संसाधन null देता है, है ना? क्या आप वाकई सही हैं? जैसा कि आपके पास है, यह वर्तमान वर्ग के पैकेज के सापेक्ष है। पैकेज रूट के सापेक्ष होने के लिए पथ / से शुरू नहीं होना चाहिए?

URL resource = getClass().getResource("/rsc/my_resource_file.txt"); 
// ... 

वैकल्पिक रूप से, आप भी संदर्भ वर्ग लोडर उपयोग कर सकते हैं, यह हमेशा classpath (पैकेज) के सापेक्ष है जड़:

ClassLoader loader = Thread.currentThread().getContextClassLoader(); 
URL resource = loader.getResource("rsc/my_resource_file.txt"); 
// ... 

कम से कम, ग्रहण लांचर यहां इसके लिए जिम्मेदार नहीं है।

3

प्रोजेक्ट पर राइट क्लिक करें और गुणों का पालन करें।

+0

मेरे पास एक ही समस्या थी और ऐसा इसलिए था क्योंकि मैंने क्लासपाथ में रूट निर्देशिका शामिल की थी। –

3

फ़ाइल को अपने स्रोत पेड़ में शीर्ष स्तर निर्देशिका में रखें। इसे अक्सर "src" कहा जाता है। फिर, जब आप अपनी परियोजना का निर्माण करते हैं तो फ़ाइल आपकी कक्षा निर्देशिका में कॉपी की जाएगी (नाम भिन्न होता है)। अंत में, फ़ाइल बनाने के बाद पोस्ट आपके क्लासपाथ (ग्रहण पर्यावरण के भीतर) में होगा।

Class someClassObject = BlammyClassName.class; 
someClassObject.getResource("my_resource_file.txt"); 

आपके संसाधन में एक यूआरएल वापस करेगा।

someClassObject.getResourceAsStream("my_resource_file.txt"); 

एक स्ट्रीम लौटाएगा।

संपादित करें: इस तरह बदल दिया गया है कि यह कक्षा विधियों को सांख्यिकीय रूप से संदर्भित नहीं करता है।

+0

वे विधियां 'स्थैतिक' नहीं हैं। फिर भी, यह नहीं होगा संदर्भ-निर्भर सापेक्ष पथों का उपयोग करने की ओपी की ठोस समस्या को हल करें। – BalusC

+0

मुझे यह शुरुआती परीक्षणों में एक वैध कार्य के रूप में मिला, लेकिन मुझे अपने src फ़ोल्डर में संसाधन फ़ाइल डालना नहीं चाहिए। इसके बजाय मैंने संसाधन फ़ोल्डर/निर्माण पथ के लिए फ़ाइल। – Buttons840

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