Otras lecciones del Curso de Java
¿Cúales son los Operadores en Java?
¿Qué tipos de Variables hay en Java?
¿Cómo funciona Continue y Break en Java?
¿Cómo aplicar un Try Catch y Finally en Java?
¿Cómo utilizar el método super en Java?
¿Cómo trabajar con listas en Java?
¿Cuáles son los métodos de la clase String en Java?
¿Qué es un entorno de desarrollo en Java?
¿Qué es la Sobreescritura de métodos en Java?
¿Cómo utilizar un return en Java?
¿Cómo hacer un Hola Mundo en Java?
¿Cómo utilizar Throw y throws en Java?
¿Cómo hacer comentarios en Java?
¿Cuáles son las Palabras reservadas en Java?
Variables de entorno en Java
Características y estadísticas de Java e índice TIOBE
Estructura de proyecto, paquetes y clases en Java
Qué es una función en Java
¿Cómo funcionan las Funciones Java?
Operadores aritméticos en Java
Operadores de comparación en Java
Funciones anónimas en Java
Cómo invocar una función en Java
Atajos de teclado para IntelliJ
¿Qué es la Sobrecarga de funciones en Java?
Operadores lógicos en Java
Debug en Java
Como se crea una función en Java
¿Cómo crear Sentencias Switch en Java?
Bucles for en Java
¿Cómo hacer sentencias If e If else en Java?
¿Cómo funcionan los Bucles While en Java?
¿Qué son los objetos en Java?
¿Qué es el modificador static en Java y cómo se utiliza?
¿Qué es la herencia en Java?
¿Qué son los constructores en Java y cómo se utilizan?
¿Cómo crear clases en Java?
¿Qué es el Polimorfismo en Java?
¿Qué son las Clases Abstractas en Java?
¿Qué es la Programación genérica en Java?
¿Qué son las Interfaces de Java?
Implementación de una interface en Java
¿Cómo se hace refactoring en Java?
¿Cómo trabajar con Maps en Java?
¿Como funcionan los arrays en Java?
¿Cómo generar excepciones en Java?
¿Qué es la clase Scanner en Java?
Introducción a Swing en Java
¿Quieres descubrir más cosas como IO estándar en Java?¡Apuntate a nuestro campus y empieza a aprender con nosotros y con toda la comunidad!

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 que estos procesos se lleven a cabo.

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.

Entonces, para leer datos primitivos en Java se hace de la siguiente manera:

Entrada por teclado y salida por pantalla con IO en Java

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:

  • System.in que es el objeto que recibe datos desde el teclado o el ratón y es parte de la clase InputStream.
  • System.out un objeto que imprime los datos que se van a mostrar en la salida que en este caso es la pantalla.

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.

Funcionamiento de IO en Java

Para cumplir con su tarea, el paquete java.io tiene una serie de clases separadas en dos grandes grupos:

  • InputStream.
  • OutputStream.

InputStream

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: 

  • read(): lee un byte de datos del flujo de entrada.
  • available(): devuelve el número de bytes disponibles en el flujo de entrada.
  • skips(): descarta el número de bytes especificados.
  • close(): cierra el flujo de entrada.

También tiene subclases que permiten implementar mayor funcionalidad, entre ellas: 

  • FileInputStream.
  • ByteArrayInputStream.
  • ObjectInputStream.

OutputStream

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:

  • write(): escribe el byte en el flujo de salida.
  • flush(): se asegura de que los bytes que aún no se han escrito lo hagan.
  • close(): cierra el flujo de salida.

Entre las subclases que implementan la funcionalidad de esta clase tenemos:

  • FileOutputStream.
  • FilterOutputStream.
  • PipedOutputStream.

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.

¿Todavía no te has apuntado a nuestro Bootcamp?
Tenemos muchos cursos para ofrecerte y ¡TOTALMENTE GRATIS! Estos son algunos de ellos: