Toda aplicación requiere información de entrada para realizar las operaciones que cada proceso resuelve, así como requiere mecanismos de salida para entregar los resultados.
La forma de representar estas entradas y salidas en Java es con base en “streams” que son flujos de datos. Un “stream” se comporta como un medio de comunicación entre el programa y la fuente o destino de los datos. La información se transporta en serie a través de este medio
Clase System
En Java, la entrada desde teclado y la salida a pantalla se utilizan a través de la clase System. Esta clase pertenece al paquete java.lang y posee atributos y métodos que se relacionan directamente con el sistema local.
Tipo
Atributo
Descripción
static InputStream
in
Objeto preparado para recibir datos desde la entrada estándar del sistema que generalmente es el teclado
static PrintStream
out
Objeto preparado para imprimir los datos en la salida estándar del sistema que generalmente es la pantalla
static PrintStream
err
Objeto utilizado para mensajes de error presentados por defecto en pantalla.
Clase InputStream
La clase InputStream, es necesaria para realizar la lectura de información por entrada estándar. Esta clase pertenece al paquete java.io.
Retorno
Método
Descripción
int
available()
Retorna el número estimado de bytes que pueden ser leídos por el InputStream Constructor que inicializa el BigInteger con el valor de la cadena de caracteres del parámetro.
abstract int
read()
Lee el siguiente byte de datos del InputStream.
int
read(byte[] b)
Lee un número de bytes desde el InputStream y lo almacena en el parámetro.
int
read(byte[] b, int off, int len)
Lee hasta la longitud dada por el parámetro len desde el InputStream y lo almacena en el parámetro b.
long
skip(long n)
Salta y descarta n bytes de datos del InputStream
Ejemplo de uso del método read
Para leer desde teclado se puede utilizar el método read de la clase InputStream. Este método lee un carácter por cada llamada. Su valor de retorno es un int que corresponde al código ASCII del carácter capturado. Si se espera cualquier otro tipo hay que hacer una conversión explícita mediante un “cast”. Así mismo, este método requiere realizar el manejo de excepción de la clase IOException.
La clase BufferedReader, proporciona métodos para la captura de información en cadenas de caracteres, optimizando el proceso que se debería realizar a través del objeto “in” de la clase System. Esta clase pertenece al paquete java.io
Retorno
Método
Descripción
void
BufferedReader(Reader in)
Constructor que crea un buffer de entrada de datos a través del parámetro
void
close()
Cierra el Stream
int
read()
Lee un carácter y retorna el valor entero del carácter equivalente al código ASCII
String
readLine()
Lee una cadena de caracteres
Ejemplo de uso del método readLine
Una de las formas más simples de utilizar el BufferedReader, con entrada estándar, es a través de una estructura de repetición while para leer indefinidamente hasta no encontrar más información.
11
21
31
41
51
Exception in thread "main" java.lang.NumberFormatException: For input string: "Hola mundo"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at EjemplosSystem.main(EjemplosSystem.java:16)
En el caso anterior queda evidencia del uso de la excepción, debido a que el texto “Hola mundo”, no se puede convertir a numero, se produce la excepción controlada por la clase java.lang.NumberFormatException.
Clase Scanner
La clase Scanner, proporciona métodos para la captura de información en diferentes tipos de datos. Esta clase pertenece al paquete java.io
Retorno
Método
Descripción
void
Scanner(File source)
Constructor que crea un Scanner que produce valores capturados desde un archivo especificado por el parámetro.
void
Scanner(InputStream source)
Constructor que crea un Scanner que produce valores capturados desde un InputStream especificado por el parámetro.
void
close()
Cierra el Scanner
boolean
hasNext()
Retorna verdadero si el Scanner posee otro token en la entrada
boolean
hasNextBigInteger()
Retorna verdadero si el Scanner posee otro token en la entrada que puede ser interpretado como BigInteger
boolean
hasNextBoolean()
Retorna verdadero si el Scanner posee otro token en la entrada que puede ser interpretado como booleano mediante las cadenas true o false
boolean
hasNextDouble()
Retorna verdadero si el Scanner posee otro token en la entrada que puede ser interpretado como double
boolean
hasNextFloat()
Retorna verdadero si el Scanner posee otro token en la entrada que puede ser interpretado como float
boolean
hasNextInt()
Retorna verdadero si el Scanner posee otro token en la entrada que puede ser interpretado como int
boolean
hasNextLine()
Retorna verdadero si el Scanner posee una nueva cadena de caracteres.
boolean
hasNextLong()
Retorna verdadero si el Scanner posee otro token en la entrada que puede ser interpretado como long
boolean
hasNextShort()
Retorna verdadero si el Scanner posee otro token en la entrada que puede ser interpretado como short
String
next()
Retorna el siguiente token como cadena de caracteres
BigInteger
nextBigInteger()
Retorna el siguiente token como BigInteger
boolean
nextBoolean()
Retorna el siguiente token como boolean
double
nextdouble()
Retorna el siguiente token como double
float
nextFloat()
Retorna el siguiente token como float
int
nextInt()
Retorna el siguiente token como int
String
nextLine()
Retorna la siguiente línea como cadena de caracteres
long
nextLong()
Retorna el siguiente token como long
short
nextShort()
Retorna el siguiente token como short
Ejemplo de uso de los métodos hasNext, hasNextInt, next y nextInt
Conociendo los datos de entrada, es de bastante utilidad la clase Scanner, debido a que esta no requiere realizar “cast” en caso en que los datos sean diferentes de String. Por otro lado, es sencillo controlar el tipo de dato del siguiente token evitando presencia de excepciones.
No hay comentarios:
Publicar un comentario