Pergunta

Eu tenho o seguinte código simples:

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);
       }
    }
}

E eu recebo a seguinte mensagem de erro:

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

Alguém tem alguma idéia por quê? Eu apenas tentei simplificar o código fornecido no site da soma (aqui). Eu simplifiquei demais?

Foi útil?

Solução

Você deve adicionar "lança ioexception" ao seu método principal:

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

Você pode ler um pouco mais sobre exceções verificadas (que são específicas para Java) em Jls.

Outras dicas

Java tem um recurso chamado "Exceções verificadas". Isso significa que existem certos tipos de exceções, a saber, a exceção da subclasse, mas não a tempo de execução, de modo que, se um método pode jogá -los, ele devo Liste -os em seus arremessos Declaração, digamos: void readData () lança a ioexception. IoException é um desses.

Assim, quando você está chamando um método que lista a IoException em seus arremessos Declaração, você deve listá -lo em seus próprios arremessos ou pegá -la.

A lógica para a presença de exceções verificadas é que, para alguns tipos de exceções, você não deve ignorar o fato de que eles podem acontecer, porque o acontecimento deles é uma situação bastante regular, não um erro do programa. Portanto, o compilador ajuda você a não esquecer a possibilidade de uma exceção ser levantada e exige que você lide com isso de alguma forma.

No entanto, nem todas as classes de exceção verificadas na biblioteca padrão Java se encaixam nessa lógica, mas esse é um tópico totalmente diferente.

Tente novamente com este snippet de código:

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();
        }   
    }
}

Usando try-catch-finally é melhor do que usar throws. Encontrar erros e depuração são mais fáceis quando você usa try-catch-finally.

A entrada de leitura do teclado é análoga para baixar arquivos da Internet, o sistema Java IO abre conexões com a fonte de dados a serem lidos usando o InputStream ou o leitor, você deve lidar com uma situação em que a conexão pode quebrar usando o IoExceptions

Se você quiser saber exatamente o que significa trabalhar com InputStreams e BufferredReader esse vídeo mostra isso

Adicione "lança ioexception" ao seu método como este:

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

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

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


    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top