Cuando se desarrolla una aplicación o un programa, este recibe datos o información para procesar y luego entregar un resultado.
El paquete java.io contiene todo lo necesario para recibir los datos o información, procesarlos y entregar un resultado de una aplicación o programa.
En Java la entrada y salida de datos se hace a través de streams, este flujo de datos, por lo general, se recibe a través del teclado y se entrega por medio de la pantalla.
Los streams pueden manejar bytes, datos primitivos y hasta objetos, para ello la clase java.io ofrece varias clases cuya función es gestionar la comunicación del programa.
Para cumplir con su tarea, el paquete java.io tiene una serie de clases separadas en dos grandes grupos:
Es una clase abstracta que contiene todos los métodos que sirven para leer datos en los programas en Java. Esta lectura puede hacerse desde diversas fuentes. Soporta algunos métodos como:
También tiene subclases que permiten implementar mayor funcionalidad, entre ellas:
Es la clase abstracta en Java que contiene los métodos para escribir datos de salida. Puede hacerse por diferentes medios. Soporta algunos métodos como:
Entre las subclases que implementan la funcionalidad de esta clase tenemos:
Con la práctica, el uso de estos paquetes y las herramientas que suministran se volverá más fluido y, por lo tanto, será más sencillo codificar cualquier proyecto sin que esto represente una dificultad.
Para leer datos primitivos en Java se hace de la siguiente manera:
La entrada por teclado y salida por pantalla, conocidas como el método estándar para dar y recibir información de cualquier aplicación que se esté desarrollando, se relacionan con la clase System.
Hay 2 objetos que son esenciales para este aspecto:
Otro aspecto importante a tomar es la clase Scanner que, combinada con lo mencionado anteriormente, permite la entrada de datos primitivos cuando se está codificando en Java.
Puede comprenderse mejor al mirar el siguiente ejemplo básico:
import java.util.Scanner;
public class ScannerMain {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Escribe tu nombre");
String nombre = scanner.nextLine();
System.out.println("Escribe tu edad");
int edad = scanner.nextInt();
System.out.println("Tu nombre es: " + nombre);
System.out.println("Tu edad es: " + edad);
}
}
Por cada tipo de dato primitivo a leer, la clase Scanner utiliza un método, como muestra esta relación:
Método | Función |
---|---|
next() | devolver el siguiente token de ese scanner |
nextDouble() | Toma el siguiente token de la entrada como un dato double |
nextInt() | Toma el siguiente token de la entrada como un dato int |
nextLine() | Hace avanzar el scanner más allá de la línea actual y devuelve el contenido de la que se ha saltado |
nextLong() | Toma el siguiente token de la entrada como un dato de tipo Long |
close() | cerrar el Scanner. |
hasNext() | verificar si hay otro token en esa entrada |
hasNextDouble() | verificar si el siguiente token es un dato de tipo double |
hasNextInt() | verificar si el siguiente token puede ser interpretado como un valor de tipo entero |
hasNetxLine() | verificar si hay otra línea |
hasNextLong() | verificar si el siguiente token es un dato de tipo long |
Ahora bien, no siempre el programa va a requerir datos de tipo primitivo, en muchas oportunidades será necesario el uso de ficheros, matrices o dispositivos externos.
Para estas situaciones, Java dispone de otras herramientas más complejas que funcionan a través de métodos y clases que dependen del paquete java.io.