2009-06-03 16 views
6

मैं फ्लैट फ़ाइलों से डेटा पार्स और लोड करने के लिए FlatPack का उपयोग कर रहा हूं। इसके लिए एक कॉन्फ़िगरेशन फ़ाइल लोड करने की आवश्यकता होती है जो फ्लैट फ़ाइल के कॉलम के मैपिंग स्टोर करता है।मैं जार के अंदर एक कॉन्फ़िगरेशन फ़ाइल कैसे एक्सेस करूं?

private static final String MAPPING_FILE = "src/com/company/config/Maping.pzmap.xml"; 

मैं एक पार्स (फ़ाइल datafile) है विधि है कि वास्तव में पार्स करता है::

मैं मानचित्रण फ़ाइल के स्थान को परिभाषित करने के लिए एक निरंतर है

private void parse(File dataFile) throws FileNotFoundException, SQLException { 
     Parser parser; 

     log.info("Parsing " + dataFile.getName()); 

     FileReader mappingFileReader = new FileReader(MAPPING_FILE); 
     FileReader dataFileReader = new FileReader(dataFile); 

     parser = DefaultParserFactory.getInstance().newFixedLengthParser(mappingFileReader, dataFileReader); 
     parser.setHandlingShortLines(true); 

     DataSet dataSet = parser.parse(); 

     //process the data 
} 

जब मैं जार सब कुछ और इसे एक जार के रूप में चलाएं - यह FileReader mappingFileReader = new FileReader(MAPPING_FILE); पर FileNotFoundException के साथ बाहर निकलता है। हालांकि यह फ़ाइल जार के अंदर है।

मैं इसे कैसे प्राप्त करूं?

मैंने this question और this question को जार के अंदर फ़ाइलों तक पहुंचने के बारे में देखा है और वे दोनों अस्थायी रूप से फ़ाइल निकालने की अनुशंसा करते हैं। मैं हालांकि ऐसा नहीं करना चाहता हूं।

उत्तर

12

यदि यह एक जार के अंदर है, तो यह आमतौर पर एक फ़ाइल नहीं है। आपको Class.getResourceAsStream(String), या कुछ समान का उपयोग कर डेटा लोड करना चाहिए।

+1

यह "कक्षा .getResourceAsStream()" – mtpettyp

+0

ओप्स होना चाहिए। उसके लिए धन्यवाद। – skaffman

1

अगर मैं सही ढंग से याद, getResourceAsStream() निर्भर करता है जो वेब सर्वर पर अपने webapp तैनात किया जाता है अलग ढंग से व्यवहार कर सकते हैं, उदाहरण के लिए मुझे लगता है कि यह एक हो सकता है एक वेबस्पेयर उदाहरण पर युद्ध के रूप में तैनात जब समस्या। लेकिन मुझे यकीन नहीं है कि यह आपके लिए लागू होता है।

लेकिन मुझे यकीन नहीं है कि आप "उचित" समस्या को हल करने का प्रयास कर रहे हैं: यदि यह एक कॉन्फ़िगरेशन फ़ाइल है, तो इसका मतलब डेटा निर्भर है? कोड निर्भर नहीं है (आपका जार)? जब फ्लैट फ़ाइल बदल जाएगी, तो आपकी कॉन्फ़िगरेशन फ़ाइल को भी बदलने की आवश्यकता होगी, है ना? यदि यह सत्य है, तो ऐसा लगता है कि कॉन्फ़िगरेशन कहीं और बेहतर ढंग से संग्रहीत किया जाना चाहिए, या यहां तक ​​कि अपने जार के पैरामीटर के रूप में भी पारित किया जाना चाहिए।

लेकिन शायद मैं पूरी तरह से आपकी समस्या से नहीं समझा गया है ...

0

उपयोग अपाचे कॉमन्स विन्यास, तो आप/लिखने एक्सएमएल, ऑटो अपडेट, पथ या जार में कॉन्फ़िग फ़ाइल मिल जाए, पढ़ सकते हैं बाधाओं का एक बहुत बिना ।

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