Java java.nio.file.Files.newInputStream()Méthode
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
throws IOException
Description du paramètre
Path path- L'objet Path du fichier à ouvrirOpenOption... 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 fichierSecurityException- 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.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 :
- Créer un
Pathobjet pointant vers le fichier à lire - Utiliser
Files.newInputStream()méthode pour obtenir le flux d'entrée - Utiliser une instruction try-with-resources pour garantir que le flux est automatiquement fermé
- 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 écritureAPPEND- Ouvre le fichier en ajoutTRUNCATE_EXISTING- Tronque le fichier s'il existe déjàCREATE- Crée un nouveau fichier s'il n'existe pasCREATE_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 creuxSYNC- Exige que chaque mise à jour soit écrite de manière synchrone dans le stockageDSYNC- 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.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
- API plus moderne: Basée sur
Pathinterface, mieux intégrée aux autres parties de NIO - Plus flexible: Peut
OpenOptionspécifier plusieurs modes d'ouverture - Meilleures performances: Dans certains cas, par rapport à
FileInputStreamles performances sont meilleures - Gestion des exceptions plus claire: Les types d'exceptions levées sont plus spécifiques
Inconvénients
- Java 7+: Nécessite Java 7 ou supérieur
- Courbe d'apprentissage: Les développeurs familiers avec les E/S traditionnelles doivent s'adapter
Bonnes pratiques
- Toujours utiliser try-with-resources: Assurez-vous que le flux d'entrée est correctement fermé
- Utiliser la mise en mémoire tampon lors du traitement de gros fichiers: Envisagez de l'encapsuler dans
BufferedInputStreampour améliorer les performances - Vérifier si le fichier existe: Avant d'essayer d'ouvrir, vous pouvez utiliser
Files.exists(path) - Gérer les exceptions: Gérez correctement les possibles
IOException
Exemple 3 : Exemple de bonne pratique
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 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 java.nio.file.Files