Présentation du package Java NIO

Mehvish Ashiq 15 février 2024
  1. Présentation du package Java NIO
  2. Utiliser le package NIO pour lire et écrire dans un fichier en Java
Présentation du package Java NIO

Ce tutoriel présente le package Java NIO. Nous avons déjà un package java.io pour effectuer des opérations de lecture/écriture, mais java.nio nous permet de travailler différemment avec des fonctionnalités supplémentaires.

Comment? Plongeons dans ses détails.

Présentation du package Java NIO

Java New Input/Output (NIO) est une structure de gestion de fichiers et une API de mise en réseau hautes performances. Le package java.nio contient toutes les classes NIO ; il ne remplace pas les classes d’entrée/sortie basées sur les flux (IO) dans le package java.io.

Le Java NIO a été introduit à partir de la version JDK 4 fonctionne comme une alternative à java.io avec quelques caractéristiques et fonctionnalités supplémentaires pour travailler avec les entrées/sorties (IO) différemment par rapport à l’entrée/sortie standard (IO).

Nous savons déjà que le package java.io possède toutes les classes nécessaires que nous pouvons utiliser pour les opérations d’E/S Java, tandis que le java.nio introduit des classes buffer qui peuvent être utilisées dans les API Java NIO .

Vous vous posez peut-être une question : quand on a déjà un package java.io, pourquoi en introduire un nouveau nommé java.nio ?

Principales raisons d’utiliser le package Java NIO

Nous préférons utiliser le package java.nio pour deux raisons.

  1. Le package java.nio utilise une approche orientée tampon qui nous permet d’aller et venir dans le tampon. Il utilise un bloc de mémoire (également appelé tampon) pour lire et mettre en cache les données, auxquelles on accède rapidement à partir du tampon chaque fois que nécessaire ; nous pouvons également écrire des données dans le tampon.

  2. Le package java.nio peut effectuer des opérations d’entrée/sortie (IO) non bloquantes. Ici, non bloquant signifie qu’il peut lire les données/informations selon ce qu’il trouve prêt.

    Par exemple, nous avons un thread qui demande au canal de lire les données/informations du tampon ; le thread va pour d’autres opérations dans ce laps de temps et continue là où il a laissé le travail. Pendant ce temps, le processus de lecture est terminé et améliore les performances globales.

La principale différence entre NIO et IO est que NIO est non bloquant tandis que IO est bloquant.

Nous pouvons donner la priorité à l’utilisation de Java NIO par rapport au package IO chaque fois que nous recherchons une approche orientée tampon et des opérations d’entrée / sortie à grande vitesse.

Noter
Pour utiliser parfaitement le package Java NIO, vous devez comprendre le package Java IO.

Principaux composants du package Java NIO

Il a les composants principaux suivants pour fonctionner correctement.

  1. Buffer - Comme le package java.nio est orienté tampon, il possède des tampons pour les types de données primitifs. Les tampons sont utilisés comme conteneurs où nous pouvons lire des données depuis/vers le tampon pour un traitement ultérieur en utilisant un canal.
  2. Channel - La classe de canal de java.nio est similaire aux flux (flux IO) utilisés pour la communication bidirectionnelle. En utilisant des canaux, nous pouvons effectuer des opérations d’entrée/sortie non bloquantes ; nous pouvons également lire/écrire des données depuis/vers la mémoire tampon des canaux.

Les canaux sont utilisés comme une passerelle où la connexion à diverses entités est décrite par des canaux qui peuvent effectuer des opérations IO non bloquantes.

  1. Seletor - Nous pouvons utiliser des sélecteurs pour accomplir des opérations IO non bloquantes. Un sélecteur (un objet) surveille plus d’un canal pour les événements.

    On peut dire que les sélecteurs sélectionnent les canaux prêts à effectuer des opérations d’entrée/sortie.

Utiliser le package NIO pour lire et écrire dans un fichier en Java

Voici la représentation graphique des différentes classes qui peuvent être utilisées pour effectuer différentes opérations.

introduction au paquet java nio - classes

Vous pouvez en savoir plus sur java.nio ici, mais nous nous concentrons sur la lecture à partir d’un fichier et l’écriture sur des opérations liées à un fichier dans ce didacticiel ; voir les exemples suivants.

Exemple de code (pour lire à partir d’un fichier) :

import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

public class readFromFile {
  public static void main(String[] args) {
    Path filePath = Paths.get("file.txt");
    Charset charSet = Charset.forName("ISO-8859-1");

    try {
      List<String> lines = Files.readAllLines(filePath, charSet);
      for (String line : lines) {
        System.out.println(line);
      }
    } catch (IOException e) {
      System.out.println(e);
    }
  }
}

Exemple de code (pour écrire dans un fichier) :

import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

public class writeToFile {
  public static void main(String[] args) {
    Path filePath = Paths.get("file.txt");
    String message = "We have overwritten the file";
    Charset charSet = Charset.forName("ISO-8859-1");

    try {
      Files.write(filePath, message.getBytes());
      List<String> lines = Files.readAllLines(filePath, charSet);
      for (String line : lines) {
        System.out.println(line);
      }
    } catch (IOException e) {
      System.out.println(e);
    }
  }
}

Sortie (lecture à partir d’un fichier et écriture dans un fichier) :

introduction au paquet java nio - sortie

Nous lisons les données du fichier spécifié et les imprimons sur la ligne de commande dans le premier extrait de code. Dans le deuxième exemple de code, nous écrivons les données (une petite chaîne) dans le fichier donné et les imprimons à l’écran pour indiquer ce qui est écrit dans le fichier.

Dans le premier exemple de code, nous appelons la méthode Paths.get() la méthode de fabrique pour l’instance Path. En termes simples, nous pouvons dire qu’il crée une instance Path chaque fois que nous appelons la méthode statique nommée get() de la classe java.nio.file.Paths.

Cette méthode prend soit une séquence de chaînes (ces chaînes seront jointes pour former un chemin), soit une chaîne en tant que paramètres et la convertit en l’instance Path. Il lance InvalidPathException si des caractères illégaux se trouvent dans la chaîne que nous passons.

Comme File, java.nio.file.Path peut faire référence à un chemin relatif ou absolu dans le système de fichiers.

Charset est utilisé pour l’encodage des caractères. Nous utilisons le codage de caractères ISO-8859-1, mais vous pouvez spécifier UTF-8 ou tout autre que vous souhaitez utiliser.

La méthode readAllLines() lit un fichier texte ligne par ligne. Nous sauvegardons les données lues dans une List de String (voir le code).

De plus, nous utilisons une boucle for pour afficher toutes les lignes lues à l’écran.

Dans le deuxième exemple de code, toute la logique est la même sauf cette ligne de code.

Files.write(filePath, message.getBytes());

Le File.write() est une méthode statique du package Java NIO utilisée pour écrire dans le fichier spécifié.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook