Java java.nio.file.Files.newInputStream()Método

Java File Java java.nio.file.Files


newInputStream()El método se utiliza para abrir un archivo y devuelve un flujo de entrada para leer datos de dicho archivo. Esta es una forma más moderna de operación de archivos proporcionada por Java NIO, en comparación con el tradicionalFileInputStream, ofrece un mejor rendimiento y funciones más ricas.

Definición del método

public static InputStream newInputStream(Path path, OpenOption... options)
    throws IOException

Descripción de parámetros

  1. Path path- El objeto de ruta del archivo a abrir
  2. OpenOption... options- Parámetros opcionales, especifican el modo de apertura del archivo

Valor de retorno

Devuelve un nuevoInputStreamobjeto, que se puede utilizar para leer datos del archivo

Excepciones

  • IOException- Si ocurre un error de E/S al abrir el archivo
  • SecurityException- Si el administrador de seguridad existe y deniega el acceso al archivo

Uso básico

Ejemplo 1: La lectura de archivo más simple

Ejemplo

import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class FilesExample {
    public static void main(String[] args) {
        Path path = Paths.get("example.txt");
       
        try (InputStream inputStream = Files.newInputStream(path)) {
            int data;
            while ((data = inputStream.read()) != -1) {
                System.out.print((char) data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

En este ejemplo, nosotros:

  1. Creamos unPathobjeto que apunta al archivo a leer
  2. UsamosFiles.newInputStream()el método para obtener el flujo de entrada
  3. Usamos la declaración try-with-resources para asegurar que el flujo se cierre automáticamente
  4. Leemos el contenido del archivo byte a byte y lo imprimimos

Uso avanzado

Uso del parámetro OpenOption

OpenOptionLa interfaz nos permite especificar el modo de apertura del archivo. La clase de implementación comúnmente utilizada esStandardOpenOption, que proporciona las siguientes opciones:

  • READ- Abre el archivo en modo lectura (predeterminado)
  • WRITE- Abre el archivo en modo escritura
  • APPEND- Abre el archivo en modo agregar
  • TRUNCATE_EXISTING- Si el archivo ya existe, lo trunca
  • CREATE- Crea un archivo nuevo si no existe
  • CREATE_NEW- Crea un archivo nuevo, falla si ya existe
  • DELETE_ON_CLOSE- Elimina el archivo cuando se cierra el flujo
  • SPARSE- Sugiere al sistema de archivos crear un archivo disperso
  • SYNC- Requiere que cada actualización se sincronice con el almacenamiento
  • DSYNC- Requiere que cada actualización se sincronice con el almacenamiento (solo contenido)

Ejemplo 2: Especificar opciones de apertura

Ejemplo

import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;

public class FilesExampleWithOptions {
    public static void main(String[] args) {
        Path path = Paths.get("example.txt");
       
        try (InputStream inputStream = Files.newInputStream(path,
                StandardOpenOption.READ,
                StandardOpenOption.DSYNC)) {
            // Leer el contenido del archivo...
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Comparación con FileInputStream tradicional

Ventajas

  1. API más moderna: basada enPathinterfaz, mejor integración con otras partes de NIO
  2. Más flexible: es posibleOpenOptionespecificar múltiples modos de apertura
  3. Mejor rendimiento: en algunos casosFileInputStreamel rendimiento es mejor
  4. Manejo de excepciones más claro: los tipos de excepción lanzados son más específicos

Desventajas

  1. Java 7+: requiere Java 7 o superior
  2. Curva de aprendizaje: los desarrolladores familiarizados con la E/S tradicional deben adaptarse

Mejores prácticas

  1. Usar siempre try-with-resources: asegurar que el flujo de entrada se cierre correctamente
  2. Usar buffering al manejar archivos grandes: considere envolverlo enBufferedInputStreampara mejorar el rendimiento
  3. Verificar si el archivo existe: antes de intentar abrir, se puede usarFiles.exists(path)
  4. Manejo de excepciones: manejar adecuadamente los posiblesIOException

Ejemplo 3: Ejemplo de mejores prácticas

Ejemplo

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class FilesBestPractice {
    public static void main(String[] args) {
        Path path = Paths.get("largefile.dat");
       
        if (!Files.exists(path)) {
            System.err.println("El archivo no existe: " + path);
            return;
        }
       
        try (InputStream rawStream = Files.newInputStream(path);
             BufferedInputStream bufferedStream = new BufferedInputStream(rawStream)) {
           
            byte[] buffer = new byte[8192];
            int bytesRead;
            while ((bytesRead = bufferedStream.read(buffer)) != -1) {
                // Procesar los datos leídos...
            }
        } catch (IOException e) {
            System.err.println("Error al leer el archivo: " + e.getMessage());
        }
    }
}

Resumen

Files.newInputStream()es una herramienta de lectura de archivos potente y flexible en Java NIO, en comparación con la tradicionalFileInputStreamproporciona más funciones y mejor rendimiento. Mediante el uso adecuado deOpenOptionlos parámetros y siguiendo las mejores prácticas, se puede escribir código de lectura de archivos eficiente y confiable.

Java File Java java.nio.file.Files

Otras extensiones