Почему я получаю «Необработанный тип исключения 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 

У кого-нибудь есть идеи, почему? Я просто попытался упростить код, указанный на веб-сайте суммы ( здесь ). Я упростил?

Вы должны добавить «throws IOException» к вашему основному методу:

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

Вы можете прочитать немного больше об проверенных исключениях (которые специфичны для Java) в JLS .

Java имеет функцию «проверенные исключения». Это означает, что есть определенные исключения, а именно те, которые являются подclassом Exception, но не RuntimeException, так что если метод может их бросить, он должен перечислить их в своем объявлении throw, скажем: void readData () выдает исключение IOException. IOException является одним из таких.

Таким образом, когда вы вызываете метод, который перечисляет IOException в объявлении throws, вы должны либо перечислить его в своем собственном объявлении броска, либо поймать его.

Обоснование наличия проверенных исключений заключается в том, что для некоторых видов исключений вы не должны игнорировать тот факт, что они могут произойти, потому что их происходит довольно обычная ситуация, а не программная ошибка. Таким образом, компилятор помогает вам не забывать о возможности возникновения такого исключения и требует от вас каким-то образом обработать его.

Однако не все проверенные classы исключений в стандартной библиотеке Java подходят под это обоснование, но это совершенно другая тема.

Повторите попытку с помощью этого fragmentа кода:

 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 .

Чтение ввода с клавиатуры аналогично загрузке файлов из Интернета, система java io открывает соединения с источником данных, которые нужно читать с помощью InputStream или Reader, вы должны обрабатывать ситуацию, когда соединение может прерываться с помощью IOExceptions

Если вы хотите точно знать, что значит работать с InputStreams и BufferedReader, это видео показывает это

добавьте «throws IOException» в ваш метод следующим образом:

 public static void main(String args[]) throws IOException{ FileReader reader=new FileReader("db.properties"); Properties p=new Properties(); p.load(reader); } 
  • Использование fseek с указателем файла, указывающим на stdin
  • Стоит ли вообще заглядывать в буфер stdin?
  • запустить exe / process с stdin stdout и stderr?
  • Как прочитать строку, введенную пользователем в C?
  • Я не могу сбросить stdin
  • Как читать из stdin с помощью fgets ()?
  • Обманите приложение, думая, что его выступление - это терминал, а не труба
  • Как определить, была ли перенаправлена ​​Console.In (stdin)?
  • Чтение двоичных данных из std :: cin
  • Предоставить пароль SU в сценарии bash, в скрипте?
  • Как заставить ssh получить пароль от stdin
  • Interesting Posts
    Давайте будем гением компьютера.