2011-11-08 15 views
5

मैं एक बड़ी (700GB) फ़ाइल में पढ़ने की कोशिश कर रहा हूं और इसे लगातार संसाधित करता हूं, लेकिन जिस नेटवर्क पर मैं काम कर रहा हूं वह कभी-कभी फ़ाइल तक पहुंच को काट देगा। यह java.io.IOException मुझे बताता है कि "निर्दिष्ट नेटवर्क नाम अब उपलब्ध नहीं है"। क्या कोई तरीका है कि मैं इस अपवाद को पकड़ सकता हूं और कह सकता हूं, पंद्रह मिनटों का इंतजार कर सकता हूं, और फिर पढ़ना पुनः प्रयास कर सकता हूं, या फाइल के उपयोग के बाद एक बार रीडर ऑब्जेक्ट तला हुआ है?IOException से पुनर्प्राप्त: नेटवर्क नाम अब उपलब्ध नहीं है

यदि कनेक्शन खो जाने के बाद पाठक बेकार हो जाता है, तो क्या मैं इस तरह से इसे फिर से लिख सकता हूं ताकि मुझे "मेरी जगह को सहेजने" की अनुमति दी जा सके और फिर पढ़ने के बिना वहां से पढ़ा जाए और इससे पहले सभी डेटा त्यागें? यहां तक ​​कि प्रसंस्करण किए बिना डेटा को घुमाने में भी लंबा समय लगता है जब 500 जीबी से गुजरना पड़ता है।

class Processor { 
    BufferedReader br; 

    Processor(String fname) { 
     br = new BufferedReader(new FileReader("fname")); 
    } 

    void process() { 
     try { 
      String line; 
      while((line=br.readLine)!=null) { 
       ...code for processing the line goes here... 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

अपने समय के लिए धन्यवाद:

वर्तमान में, कोड कुछ इस तरह (संक्षिप्तता के लिए संपादित) लग रहा है।

+0

वह उस व्यक्ति होना चाहिए जिसने सोनी को हैक किया .... 700 जीबी पवित्र बकवास ... –

उत्तर

4

आप एक चर में पढ़ने बाइट्स का ट्रैक रख सकते हैं। उदाहरण के लिए यहां मैं पढ़ने वाले एक चर में ट्रैक रखता हूं, और buff char [] है। सुनिश्चित नहीं है कि रीडलाइन विधि का उपयोग करना संभव है या नहीं।

read+=br.read(buff); 

तो अगर आप को पुनः आरंभ करने की जरूरत है, आप छोड़ सकते हैं कि कई बाइट्स

br.skip(read); 

तो फिर तुम दूर प्रसंस्करण रख सकते हैं। शुभकामनाएं

+2

कुछ 'इनपुटस्ट्रीम' कार्यान्वयन 'चिह्न()' विधि का भी समर्थन करते हैं, जो आपको मूल रूप से स्ट्रीम में अपनी जगह को सहेजने की अनुमति देता है। उपयोगी भी हो सकता है ... – BenCole

0

मुझे संदेह है कि अंतर्निहित एफडी अभी भी इस त्रुटि के बाद प्रयोग योग्य होगा, लेकिन आपको इसे आजमा देना होगा। शायद आपको फ़ाइल को फिर से खोलना होगा और उस स्थान पर जाना होगा जहां आप थे।

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