के भीतर एक ज़िप फ़ाइल पढ़ना पहले हमारे पास हमारे वेब एप्लिकेशन में कुछ ज़िप फ़ाइलें थीं। हम ज़िप फ़ाइल के भीतर एक विशिष्ट पाठ दस्तावेज़ को पर्स करना चाहते हैं। यह कोई समस्या नहीं थी:एक जार फ़ाइल
URL url = getClass().getResource(zipfile);
ZipFile zip = new ZipFile(url.getFile().replaceAll("%20", " "));
Entry entry = zip.getEntry("file.txt");
InputStream is = zip.getInputStream(entry);
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = reader.readLine();
while (line != null) {
// do stuff
}
हालांकि हमने इन ज़िप फ़ाइलों को दूसरे मॉड्यूल में स्थानांतरित कर दिया है और उन्हें एक जार के भीतर पैकेज करना चाहते हैं। दुर्भाग्यवश, ZipFile
बनाना अब विफल रहता है। मैं ज़िप के लिए InputStream
प्राप्त कर सकता हूं: लेकिन मेरे पास प्रविष्टि के लिए इनपुट स्ट्रीम प्राप्त करने का कोई तरीका नहीं है।
InputStream is = getClass().getResourceAsStream(zipfile);
ZipInputStream zis = new ZipInputStream(is);
ZipEntry entry = zis.getNextEntry();
while (entry != null && !entry.getName().equals("file.txt")) {
entry = zis.getNextEntry();
}
लेकिन मेरे पास प्रविष्टि के लिए इनपुट स्ट्रीम प्राप्त करने का कोई तरीका नहीं है। मैंने प्रविष्टि की लंबाई खोजने और ZipInputStream
से अगले एन बाइट्स प्राप्त करने का प्रयास किया लेकिन यह मेरे लिए काम नहीं करता था। ऐसा लगता है कि सभी बाइट पढ़े गए थे 0.
क्या इस दौर में कोई रास्ता है या क्या मुझे ज़िप फ़ाइलों को मूल परियोजना में वापस ले जाना होगा?
वास्तव में, आप बाहरी पढ़ने के लिए Class.getResourceAsStream और ZipInputStream उपयोग कर सकते हैं -जिप भी। इस तरह, आपको विज्ञापन-प्रसार फ़ाइल नाम बदलने की आवश्यकता नहीं है और फ़ाइल पहुंच के लिए URL पर भरोसा नहीं है। – helios