2010-05-04 18 views
6

किस परिस्थितियों में java.util.zip.ZipFile.close() एक आईओएक्सप्शन फेंक देगा? इसकी विधि हस्ताक्षर इंगित करता है कि इसे फेंक दिया जा सकता है, लेकिन स्रोत कोड से ऐसा कोई प्रतीत नहीं होता है जहां यह हो सकता है, जब तक यह देशी कोड में न हो। उस बिंदु पर क्या सुधारात्मक कार्रवाई, यदि कोई हो, तो उस अपवाद को पकड़ा जा सकता है?जब java.util.zip.ZipFile.close() IOException फेंकता है?

उत्तर

7

API docs on ZipFile.close() से:

इस ज़िप फ़ाइल समापन इनपुट के सभी बंद हो जाएगा पहले से getInputStream विधि का आमंत्रण द्वारा दिया स्ट्रीम।

और InputStream.close() एक IOException फेंकता है, तो ZipFile.close() यह भी फेंक है। API docs for InputStream.close() के अनुसार, यह IOException फेंकता है "यदि कोई I/O त्रुटि उत्पन्न होती है"। यह बहुत वर्णनात्मक नहीं है लेकिन यह एक व्यापक नेट कास्टिंग कर रहा है। इनपुटस्ट्रीम फाइल सिस्टम, नेटवर्क, मेमोरी इत्यादि से आने वाली धाराओं का प्रतिनिधित्व कर सकते हैं। इनपुटस्ट्रीम में बफर शामिल हो सकते हैं जिन्हें फ़्लश करने की आवश्यकता होती है, सॉकेट को बंद करने की आवश्यकता होती है, संसाधन जिन्हें मुक्त करने की आवश्यकता होती है, ताले जिन्हें मुक्त करने की आवश्यकता होती है, आदि IOExceptions विभिन्न कारणों से होता है।

+0

यदि अपवाद को पढ़ने() या लिखने() कॉल पर फेंक दिया गया है, तो मैं समझ सकता हूं कि पढ़ना या लिखना विफल रहा। लेकिन अगर अपवाद() पर अपवाद फेंक दिया गया है, तो क्या असफल रहा है? –

1

पास आदमी से (2):

नहीं पास की वापसी मूल्य() एक आम लेकिन फिर भी गंभीर प्रोग्रामिंग त्रुटि है जाँच। यह काफी संभव है कि पिछले लिखने (2) ऑपरेशन पर त्रुटियों की पहली बार अंतिम बंद() पर रिपोर्ट की गई है। फ़ाइल बंद करते समय रिटर्न वैल्यू की जांच नहीं कर सकती है जिससे डेटा की चुप हानि हो सकती है। यह विशेष रूप से एनएफएस और डिस्क कोटा के साथ मनाया जा सकता है।

+2

एक पठनीय धारा को बंद करने के दौरान फेंक नहीं सकता है, जावा का आईओ ढांचा इसके लिए जांच नहीं कर सकता है क्योंकि इसमें स्थाई रूप से चेक बनाम लिखने वाली धाराएं नहीं हैं। – Joshua

0

मैं सुनिश्चित नहीं हूं लेकिन मुझे लगता है IOException फेंक दिया जाता है जब निम्न घटनाओं में से एक होती हैं:

  • ज़िप फ़ाइल आवेदन के बाहर कुछ/किसी के द्वारा नष्ट किया गया। जब ड्राइव कि ज़िप फ़ाइल में शामिल है अनमाउंट किया है
  • /काट दिया

एक बहुत अधिक घटनाओं कारण हो सकता है, लेकिन उन केवल दो मैं की अभी सोच सकता है।

+0

लेकिन उन स्थितियों में से किसी एक को केवल पढ़ने-योग्य ज़िपफाइल को बंद करने में त्रुटि क्यों होगी? – EJP

+0

मैंने उल्लेख नहीं किया कि अपवाद फेंकने के लिए ये एकमात्र शर्तें हैं। –

0

ZipFile.close() के लिए दस्तावेज़ का कहना है:

इस ज़िप फ़ाइल समापन इनपुट के सभी बंद हो जाएगा पहले से getInputStream विधि का आमंत्रण द्वारा दिया स्ट्रीम।

संभवतः देशी close विधि इनपुट इनपुट को बंद कर रही है।

closeInputStream की विधि IOException एक अपवाद के रूप में है।

सबसे अधिक संभावना कारण फाइल सिस्टम पर स्पेस स्थिति से है जहां ज़िप फ़ाइल को अंतर्निहित फाइल सिस्टम में त्रुटि लिखा जा रहा है। जब तक आप फ्लाई पर इसके चारों ओर कारण और काम की पहचान नहीं कर लेते, तब तक आप उपयोगकर्ता को स्थिति की रिपोर्ट कर सकते हैं।

+0

'इनपुटस्ट्रीम' का उपयोग करते समय, आप * पढ़ रहे हैं *, * लेखन * नहीं कर रहे हैं, इसलिए लिप फ़ाइल के कारण डिस्क स्थान से बाहर चलना इस चर्चा की परिस्थितियों में 'IOException' का कारण नहीं हो सकता है । – Asaph

+0

धन्यवाद, सही। –

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