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

Java File Java java.nio.file.Files


newInputStream()Cette méthode est utilisée pour ouvrir un fichier et renvoie un flux d'entrée pour lire les données du fichier. C'est une méthode d'opération de fichier plus moderne fournie par Java NIO. Par rapport à la méthode traditionnelleFileInputStream, elle offre de meilleures performances et des fonctionnalités plus riches.

Définition de méthode

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

Description du paramètre

  1. Path path- L'objet Path du fichier à ouvrir
  2. OpenOption... options- Paramètre facultatif, spécifie comment le fichier est ouvert

Valeur de retour

Retourne un nouveauInputStreamobjet, qui peut être utilisé pour lire les données du fichier

Exceptions

  • IOException- Si une erreur d'E/S se produit lors de l'ouverture du fichier
  • SecurityException- Si un gestionnaire de sécurité existe et refuse l'accès au fichier

Utilisation de base

Exemple 1 : lecture de fichier la plus simple

Exemple

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();
        }
    }
}

Dans cet exemple, nous :

  1. Créer unPathobjet pointant vers le fichier à lire
  2. UtiliserFiles.newInputStream()méthode pour obtenir le flux d'entrée
  3. Utiliser une instruction try-with-resources pour garantir que le flux est automatiquement fermé
  4. Lire le contenu du fichier octet par octet et l'afficher

Utilisation avancée

Utilisation du paramètre OpenOption

OpenOptionL'interface nous permet de spécifier comment le fichier est ouvert. La classe d'implémentation couramment utilisée estStandardOpenOption, elle fournit les options suivantes :

  • READ- Ouvre le fichier en lecture (par défaut)
  • WRITE- Ouvre le fichier en écriture
  • APPEND- Ouvre le fichier en ajout
  • TRUNCATE_EXISTING- Tronque le fichier s'il existe déjà
  • CREATE- Crée un nouveau fichier s'il n'existe pas
  • CREATE_NEW- Crée un nouveau fichier et échoue si le fichier existe déjà
  • DELETE_ON_CLOSE- Supprime le fichier lorsque le flux est fermé
  • SPARSE- Indique au système de fichiers de créer un fichier creux
  • SYNC- Exige que chaque mise à jour soit écrite de manière synchrone dans le stockage
  • DSYNC- Nécessite que chaque mise à jour soit écrite de manière synchrone dans le stockage (contenu uniquement)

Exemple 2 : Spécification des options d'ouverture

Exemple

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)) {
            // Lire le contenu du fichier...
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Comparaison avec FileInputStream traditionnel

Avantages

  1. API plus moderne: Basée surPathinterface, mieux intégrée aux autres parties de NIO
  2. Plus flexible: PeutOpenOptionspécifier plusieurs modes d'ouverture
  3. Meilleures performances: Dans certains cas, par rapport àFileInputStreamles performances sont meilleures
  4. Gestion des exceptions plus claire: Les types d'exceptions levées sont plus spécifiques

Inconvénients

  1. Java 7+: Nécessite Java 7 ou supérieur
  2. Courbe d'apprentissage: Les développeurs familiers avec les E/S traditionnelles doivent s'adapter

Bonnes pratiques

  1. Toujours utiliser try-with-resources: Assurez-vous que le flux d'entrée est correctement fermé
  2. Utiliser la mise en mémoire tampon lors du traitement de gros fichiers: Envisagez de l'encapsuler dansBufferedInputStreampour améliorer les performances
  3. Vérifier si le fichier existe: Avant d'essayer d'ouvrir, vous pouvez utiliserFiles.exists(path)
  4. Gérer les exceptions: Gérez correctement les possiblesIOException

Exemple 3 : Exemple de bonne pratique

Exemple

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("Le fichier n'existe pas : " + 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) {
                // Traiter les données lues...
            }
        } catch (IOException e) {
            System.err.println("Erreur de lecture du fichier : " + e.getMessage());
        }
    }
}

Résumé

Files.newInputStream()est un outil de lecture de fichiers puissant et flexible dans Java NIO. Par rapport à la méthode traditionnelleFileInputStreamil offre plus de fonctionnalités et de meilleures performances. En utilisantOpenOptionles paramètres et en suivant les meilleures pratiques, vous pouvez écrire un code de lecture de fichiers efficace et fiable.

Java File Java java.nio.file.Files

Autres extensions