miércoles, 9 de abril de 2008

Leer desde la consola con Java

Jerry está aprendiendo Java, y me pidió que le explicara cómo leer datos desde la consola.

Primero que nada debo decir que no le veo ningún caso a leer datos desde la consola. En general cuando es una aplicación de consola y necesito variables introducidas por el usuario, lo que hago es pasarlas con -D mediante un bash script con read o bien en vez del -D con parámetros en la llamada al jar o a la clase. En el peor de los casos si son persistentes guardarlos en un properties. De entrada pocas veces uso Java para consola y cuando lo hago puedo contar con los dedos de la mano las veces que he necesitado leer directamente desde consola en una clase. Aunque claro, me tocó hacerlo cuando estaba aprendiendo.

No existe (o no conozco, no sé si en las últimas versiones de Java ya exista y yo ni me enteré) una función predefinida (tipo cin, scanf, read, etc...). Lo que se tiene que hacer es crear una función tal que, en este caso, lea un String en base a un BufferedReader, un InputStreamReader, y el System.in . Una función estática en una clase usada para pura utilería (o bien, que también incluya métodos de conveniencia para parseo a tipos de datos primitivos) tal vez sea lo más recomendable. La función que le hice a Jerry fué la siguiente:

public static String leerLinea() {
String x = "";
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
try {
x = br.readLine();
} catch (IOException ex) {
System.err.println("No se pudo leer por alguna razon pacheca...");
}finally{
try {
br.close();
} catch (IOException ex) {
System.err.println("No se pudo cerrar el br");
}finally{
try {
isr.close();
} catch (IOException ex) {
System.err.println("No se pudo cerrar el isr");
}
}
}
return x;
}


Pinche formato feo de esta cosa... En fin... Y se tienen que importar las clases:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
Yaaaaaaaa seeeeeeeee yaaaaaaaa seeeeeeee que esos mensajes tan "descriptivos" de las excepciones como que no van (menos el de la razón pacheca xD )... Pero bueno, si es algo formal lo de menos es cambiarlo.

Espero que sea de utilidad para alguien... Que lo dudo, pero ojalá.

Saludos,

2 comentarios:

  1. ps se asemeja al scanf el Scanner no?????

    ResponderEliminar
  2. jajajajaj a mi si me sirvió :)
    nunca me aprendo esos códigos de memoria, y siempre los busco en internet cuando los necesito... en esta ocasion, di con tu web :)
    Gracias! :D

    ResponderEliminar

Deja tu comentario... Aquí!! Ahí al rato lo checo y lo apruebo.

Posts relacionados