Como ler um dado a partir do teclado em aplicações de console?
A leitura de dados a partir do teclado em aplicações de console não é uma tarefa confortável dado que as operações de entrada disponíveis são orientadas a byte, isto é, efetuam a leitura de caractere a caractere exigindo por parte do programador tratamento para a obtenção de valores inteiros, reais ou strings.
A leitura de um valor inteiro pode ser realizada como abaixo:
int valorInteiro; try { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String s = br.readLine(); valorInteiro = Integer.parseInt(s); } catch (Exception e) { valorInteiro = 0; }
Podemos notar que a stream padrão System.in tem seus dados intermediados por outro tipo de stream, java.io.BufferedReader, que permite a leitura de cadeias de carateres finalizadas por um "enter". A string obtida é convertida num inteiro. Modificando-se a conversão pode-se realizar a leitura de outros tipos de valores a partir do teclado.
Sugere-se que tais métodos sejam declarados como estáticos e colocados dentro de uma classe para re-utilização em outros programas, tal como sugerido abaixo:
// Console.java import java.io.*; public final class Console { public static double readDouble() { try { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String s = br.readLine(); Double d = new Double(s); return d.doubleValue(); } catch (IOException e) { return 0; } catch (NumberFormatException e) { return 0; } } public static int readInteger() { try { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String s = br.readLine(); return Integer.parseInt(s); } catch (IOException e) { return 0; } catch (NumberFormatException e) { return 0; } } public static String readString() { try { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String s = br.readLine(); return s; } catch (IOException e) { return ""; } } }
Desta forma um programa Java qualquer pode utilizar-se dos métodos estáticos fornecidos por esta classe Console como exemplificado abaixo:
// ConsoleTest.java public class ConsoleTest { public static void main(String args[]){ System.out.print("Forneca um numero real: "); double x = Console.readDouble(); System.out.println("Numero Fornecido: " + x); System.out.print("Forneca um numero inteiro: "); int y = Console.readInteger(); System.out.println("Numero Fornecido: " + y); System.out.print("Forneca uma string: "); String s = Console.readString(); System.out.println("String Fornecida: " + s); } }
A classe Console deve estar presente no mesmo diretório que a aplicação que for utilizá-la, podendo ser convertida num package para permitir maior facilidade de uso e compartilhamento com outras aplicações. Veja como transformar uma classe num package no JavaFAQ 0052.