2010-02-21 14 views
26

मैं निम्नलिखित सरल कोड:मुझे "अनचाहे अपवाद प्रकार IOException" क्यों मिलता है?

import java.io.*; 
class IO { 
    public static void main(String[] args) {  
     BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));  
     String userInput;  
     while ((userInput = stdIn.readLine()) != null) { 
      System.out.println(userInput); 
     } 
    } 
} 

और मैं प्राप्त निम्न त्रुटि संदेश:

---------- 
1. ERROR in io.java (at line 10) 
    while ((userInput = stdIn.readLine()) != null) { 
         ^^^^^^^^^^^^^^^^ 
Unhandled exception type IOException 
---------- 
1 problem (1 error)[email protected]:~/work/java$ mcedit io.java 

किसी को भी किसी भी विचार क्यों है? मैं सिर्फ योग वेब साइट (here) पर दिए गए कोड को आसान बनाने की कोशिश की। क्या मैंने अधिक विस्तार किया?

उत्तर

38

आप जोड़ना चाहिए "फेंकता IOException" आपका मुख्य विधि के लिए:

public static void main(String[] args) throws IOException {

आप जांचे हुए अपवादों JLS में (जो जावा के लिए विशिष्ट हैं) के बारे में थोड़ा और अधिक पढ़ सकते हैं।

36

जावा एक विशेषता "जांचे हुए अपवादों" कहलाता है। इसका मतलब है कि अपवाद के कुछ प्रकार, अर्थात् उन है कि उपवर्ग अपवाद नहीं बल्कि RuntimeException, ऐसा है कि यदि एक विधि उन्हें फेंक सकता है, यह चाहिए सूची उन्हें इसकी घोषणा फेंकता में, कहते हैं कि देखते हैं कि: शून्य readData() फेंकता IOException। IOException उनमें से एक है।

इस प्रकार, जब आप एक विधि है कि इसके फेंकता घोषणा में IOException सूचीबद्ध करता है बुला रहे हैं, या तो आप इसे अपने में घोषणा फेंकता सूची या उसे पकड़ने चाहिए।

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

हालांकि, सभी जावा मानक पुस्तकालय फिट में इस तर्क के तहत जाँच अपवाद कक्षाएं, लेकिन यह एक पूरी तरह से अलग विषय है।

9

इस कोड स्निपेट के साथ फिर से प्रयास करें:

import java.io.*; 

class IO { 
    public static void main(String[] args) {  
     try { 
      BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));  
      String userInput;  
      while ((userInput = stdIn.readLine()) != null) { 
       System.out.println(userInput); 
      } 
     } catch(IOException ie) { 
      ie.printStackTrace(); 
     } 
    } 
} 

try-catch-finally का उपयोग throws का उपयोग कर से बेहतर है। जब आप try-catch-finally का उपयोग करते हैं तो त्रुटियों और डिबगिंग ढूँढना आसान होता है।

0

कीबोर्ड से इनपुट पढ़ना इंटरनेट से फ़ाइलों को डाउनलोड करने के समान है, जावा आईओ सिस्टम इनपुटस्ट्रीम या रीडर का उपयोग करके डेटा के स्रोत के साथ कनेक्शन खोलता है, आपको एक ऐसी स्थिति को संभालना होगा जहां कनेक्शन IOExceptions का उपयोग करके टूट सकता है

आप को पता है कि वास्तव में क्या यह InputStreams के साथ काम करने का मतलब है करना चाहते हैं और BufferedReader this video यह

0

ऐड से पता चलता है इस तरह से अपनी विधि "IOException फेंकता":

public static void main(String args[]) throws IOException{ 

     FileReader reader=new FileReader("db.properties"); 

     Properties p=new Properties(); 
     p.load(reader); 


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