2012-03-23 11 views
8

फाइल मैं एक अजीब समस्या है।FileInputStream बनाम ClassPathResource getResourceAsStream बनाम और अखंडता

मुझे क्या यदि यह:

InputStream is = new ClassPathResource("template.xlsx").getInputStream(); 

या इस:

InputStream is = ClassLoader.getSystemResourceAsStream("template.xlsx"); 

या इस:

InputStream is = getClass().getResourceAsStream("/template.xlsx"); 

जब मैं किसी कार्यपुस्तिका बनाने का प्रयास करें:

Workbook wb = new XSSFWorkbook(is); 

मैं इस त्रुटि मिलती है:

java.util.zip.ZipException: invalid block type 

लेकिन, जब मैं इस तरह मेरी फाइल मिलती है:

InputStream is = new FileInputStream("C:/.../src/main/resources/template.xlsx"); 

यह काम करता है!

क्या गलत है? मैं फ़ाइल में फुलपाथ हार्डकोड नहीं कर सकता।

क्या कोई इस से मेरी सहायता कर सकता है?

धन्यवाद

+1

क्या आप यह सुनिश्चित कर सकते हैं कि जब आप क्लासपाथ से लोड करते हैं * पूरी तरह से * सुनिश्चित हैं कि 'template.xlsx' का कौन सा संस्करण लोड किया जा रहा है? एक 'getResourceAsStream() '(और जैसा) कई स्थानों से संसाधन लोड कर सकता है। फ़ाइल नाम के साथ आप पूरी तरह से सुनिश्चित हैं कि क्या लोड किया जा रहा है। –

उत्तर

18

मुझे एक ही समस्या थी, आपको शायद मैवेन फ़िल्टरिंग में कोई समस्या है।

इस कोड को लोड स्रोत से फ़ाइल, लक्ष्य निर्देशिका से फ़ाइल फ़िल्टर नहीं किए गए

InputStream is = new FileInputStream("C:/.../src/main/resources/template.xlsx"); 

इस कोड को लोड, Maven के बाद सामग्री

InputStream is = getClass().getResourceAsStream("/template.xlsx"); 

फ़िल्टर कर दिया था आप फ़िल्टर नहीं चाहिए बाइनरी फ़ाइलें की तरह एक्सेल और इस पृष्ठ के निचले भाग में वर्णित दो पारस्परिक रूप से अनन्य संसाधन सेट का उपयोग करें maven resources plugin

+0

यह मैवेन फ़िल्टरिंग के कारण है और स्ट्रीम को लोड करने के लिए उपयोग की जाने वाली विधि नहीं है! धन्यवाद :) –

+0

उत्तर के लिए बहुत बहुत धन्यवाद, मैंने इस समस्या पर इतने सारे घंटे बिताए हैं ( –

+0

मुझे घंटे बचाए, धन्यवाद। –

0

आप

InputStream is = new FileInputStream("/main/resources/template.xlsx"); 

है जैसे कि यह पहुंच बनाने का प्रयास नहीं किया है?

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