lunes, 1 de agosto de 2011

Leer desde el teclado en JAVA

La lectura de datos desde el teclado en JAVA se puede realizar de muchas maneras, tanto para interfaces gráficas o aplicaciones simples en consola, saber ésto es muy útil, a continuación les comparto las distintas formas en las que sé hacerlo.

Usando las clases InputSreamReader y BufferedReader.


//Primero instanciamos como quien dice el flujo
InputStreamReader conlosojos = new InputStreamReader(System.in);

//Ahora declaramos el lector pasandole el objeto del stream
BufferedReader lector = new BufferedReader(conlosojos);

//Apartir de ahora solo hay que usar lo sig para leer:
lector.readLine();

Para usar esta forma que es muy útil a la hora de hacer aplicaciones en consola será necesario importar estas clases de "java.io.*", y algo muy importante es que el método readLine() debe estar contenido dentro de un bloque try & catch para manipular la excepción que lanza en caso de encontrar algún problema. Y si vamos a leer lineas muy seguido lo mejor será realizar un método que lo haga, esto sencillamente para dos cosas, nos facilita la tarea y a la larga se ahorran lineas de código.


import java.io.InputStreamReader;
import java.io.BufferedReader;

public class usaLector{

     InputStreamReader flujo = new InputStreamReader(System.in);
     BufferedReader lector = new BufferedReader(flujo);

     public static void main(String[] args) {
          //Llamada al método que lee y almacenamos en una String lo que sea que escriba.
          String linea = leerLinea();
     }

     //Se define el método que regresará un String y no recibe variables.
     public static String leerLinea() {
          //Contendremos la linea leida en una cadena
          String lineaLeida = null;

          try {
               lineaLeida = lector.readLine();
          } catch(Exception ex) {
      //Aqui maneje la excepción como guste.
          }

          return lineaLeida;
     }

}

El único problema que se puede presentar con este código es que Java tiene un capricho con los objetos y métodos estáticos, por lo cual tanto el flujo como el lector deberán ser estáticos, o si se desea se puede crear una instancia de nuestra clase "usaLector" que sea estática y así los demás objetos y métodos no necesariamente deberán ser estáticos.

Usando la clase Scanner

//Instanciamos un objeto de la clase Scanner
Scanner lector = new Scanner(System.in);

//Ahora solo basta para leer la cadena
lector.next();

Al usar la clase Scanner es necesario importarla de "java.util.*", esta clase tiene muchos métodos definidos que nos podrán ser de utilidad, como para leer numeros, leer archivos, etc. A continuación les muestro una implementación en la cual leeremos una cadena y un entero.

import java.util.Scanner;

public class leyendo {
     //Se crea un objeto global de preferencia
     Scanner lector = new Scanner(System.in);

     public static void main(String[] args) {
          //Contenemos los valores en respectivas variables
          String cadena = lector.next();
          int entero = lector.nextInt();
     }
}

Usando la clase JOptionPane


JOptionPane.showInputDialog("Introduce algún texto");

Así de fácil, así de sencillo, aunque esta ultima manera de leer datos no es precisamente la indicada para usarla en aplicaciones de consola, es muy cómoda el implementarla, Debemos importar en este caso de la librería swing "import javax.swing.*" observar la x de javax. A continuación les muestro la implementación en el método maín.

import javax.swing.JOptionPane;

public class leyendo {
     public static void main(String[] args) {
          //Almacenamos el resultado en una cadena
          String linea = JOptionPane.showInputDialog("Introduce texto");
     }
}

Ésta última lanzará una ventana gráfica en donde aparecerá el texto que pasamos como parámetro, la clase JOptionPane es muy manipulable, tiene muchos métodos formas y presentaciones para sus cuadros de dialogo, posteriormente en ambientes GUI (Interfaces Gráficas de Usuario) en la mayoría de los casos bastará con hacer un "getText()" para leer algo de un campo en específico, pero eso...eso ya es otra historia.

No hay comentarios:

Publicar un comentario

Deja un comentario! =)