Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

Dominando Java I/O: Archivos, Flujos y Fundamentos de Entrada/Salida

El paquete java.io contiene prácticamente todas las clases necesarias para realizar operaciones de entrada y salida (I/O) en Java. Todos los flujos representan una fuente de entrada y un destino de salida, y admiten datos como primitivos, objetos y caracteres localizados.

Concepto de Flujo (Stream)

Un flujo es una secuencia de datos. Existen dos tipos fundamentales:

Flujos de Bytes (Byte Streams)

Manejan datos de 8 bits. Las clases más usadas son FileInputStream y FileOutputStream.

Ejemplo: Copiar un archivo byte a byte

import java.io.*;

public class CopyFile {
    public static void main(String args[]) throws IOException {
        FileInputStream in = null;
        FileOutputStream out = null;
        try {
            in = new FileInputStream("input.txt");
            out = new FileOutputStream("output.txt");
            int c;
            while ((c = in.read()) != -1) {
                out.write(c);
            }
        } finally {
            if (in != null) in.close();
            if (out != null) out.close();
        }
    }
}

Flujos de Caracteres (Character Streams)

Manejan Unicode de 16 bits. Las clases principales son FileReader y FileWriter. Internamente usan flujos de bytes, pero leen/escriben dos bytes a la vez.

Ejemplo: Copiar archivo con caracteres Unicode

import java.io.*;

public class CopyFile {
    public static void main(String args[]) throws IOException {
        FileReader in = null;
        FileWriter out = null;
        try {
            in = new FileReader("input.txt");
            out = new FileWriter("output.txt");
            int c;
            while ((c = in.read()) != -1) {
                out.write(c);
            }
        } finally {
            if (in != null) in.close();
            if (out != null) out.close();
        }
    }
}

Flujos Estándar (Standard Streams)

Java proporciona tres flujos estándar, análogos a STDIN/STDOUT/STDERR de C/C++:

Ejemplo: Leer consola hasta tecla 'q'

import java.io.*;

public class ReadConsole {
    public static void main(String args[]) throws IOException {
        InputStreamReader cin = null;
        try {
            cin = new InputStreamReader(System.in);
            System.out.println("Introduce caracteres, 'q' para salir.");
            char c;
            do {
                c = (char) cin.read();
                System.out.print(c);
            } while (c != 'q');
        } finally {
            if (cin != null) cin.close();
        }
    }
}

Lectura y Escritura de Archivos

Jerarquía principal de clases para I/O de archivos:

Métodos Clave de FileInputStream

MétodoDescripción
read()Lee un byte; retorna -1 al final
read(byte[] b)Lee bytes en array; retorna total leído
available()Bytes disponibles para leer
close()Cierra el flujo y libera recursos

Métodos Clave de FileOutputStream

MétodoDescripción
write(int b)Escribe un byte
write(byte[] b)Escribe array de bytes
close()Cierra el flujo

Ejemplo: Escribir y leer bytes

import java.io.*;

public class FileStreamTest {
    public static void main(String args[]) {
        try {
            byte bWrite[] = {11, 21, 3, 40, 5};
            OutputStream os = new FileOutputStream("test.txt");
            for (int x = 0; x < bWrite.length; x++) {
                os.write(bWrite[x]);
            }
            os.close();

            InputStream is = new FileInputStream("test.txt");
            int size = is.available();
            for (int i = 0; i < size; i++) {
                System.out.print((char) is.read() + " ");
            }
            is.close();
        } catch (IOException e) {
            System.out.print("Excepción: " + e.getMessage());
        }
    }
}

Navegación de Archivos y Directorios

Clases principales: File, FileReader, FileWriter.

Crear Directorios

Ejemplo

import java.io.File;

public class CreateDir {
    public static void main(String args[]) {
        String dirname = "/tmp/user/java/bin";
        File d = new File(dirname);
        d.mkdirs(); // crea toda la jerarquía
    }
}

Nota: Java resuelve automáticamente separadores de ruta (/ en Windows también funciona).

Listar Contenido de un Directorio

Ejemplo

import java.io.File;

public class ReadDir {
    public static void main(String[] args) {
        try {
            File file = new File("/tmp");
            String[] paths = file.list();
            for (String path : paths) {
                System.out.println(path);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Java

  1. Dominando la entrada/salida en C: scanf() y printf() explicados
  2. Entrada/Salida de Archivos en Python: Dominando Operaciones de Lectura, Escritura y Gestión
  3. Variables y Literales en Java: Guía Completa
  4. Dominar Entrada y Salida en Java: Imprimir, Leer y Formatear Datos
  5. Clases y Objetos en Java: Guía Práctica
  6. Clases y métodos abstractos en Java: Guía completa
  7. Dominando clases anidadas e internas en Java: Tipos, ejemplos y mejores prácticas
  8. Java throw vs throws: Dominando el manejo de excepciones con ejemplos prácticos
  9. Dominando Java Scanner: Guía Completa con Ejemplos Prácticos
  10. Dominando Autoboxing y Unboxing en Java: Ejemplos Prácticos y Mejores Prácticas
  11. Domina Java: Entendiendo Objetos, Clases y Conceptos Básicos de POO