Vue d'ensemble des flux I/O Java

Importer des données en Java

Anthony Markham

VP Quant Developer

Fondamentaux des flux

  • Les flux sont des canaux de données unidirectionnels avec ordre FIFO (First In, First Out)
  • Les flux de bytes traitent les données binaires brutes (InputStream/OutputStream)
  • Les flux de caractères gèrent le texte avec encodage automatique (Reader/Writer)

Représentation des flux

Importer des données en Java

Flux de bytes

  • Utilisé pour les données binaires (images, audio, etc.)
  • Classes abstraites de base : InputStream (lecture), OutputStream (écriture)
  • Implémentations clés : FileInputStream, FileOutputStream
  • Méthodes clés : read() retourne des bytes, write() écrit des bytes

Fichiers binaires : images et audios

Importer des données en Java

Flux de bytes

try (FileInputStream fis = new FileInputStream("data.bin")) {

byte[] buffer = new byte[1024]; int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) { // Traiter les bytes dans le buffer
System.out.println("Lus " + bytesRead + " bytes"); }
} catch (Exception e) { System.err.println("Erreur : " + e.getMessage()); }
Importer des données en Java

Flux de caractères

  • Conçu spécifiquement pour les données textuelles
  • Classes abstraites de base : Reader (lecture de texte), Writer (écriture de texte)
  • Implémentations clés : FileReader, FileWriter, BufferedReader, BufferedWriter
  • Méthodes pratiques : readLine() lit une ligne complète de texte

Fichiers CSV

Importer des données en Java

Flux de caractères

try (BufferedReader reader = new BufferedReader(new FileReader("data.csv"))) {
    String line;

while ((line = reader.readLine()) != null) { // Traiter chaque ligne System.out.println(line); }
} catch (Exception e) { System.err.println("Erreur : " + e.getMessage()); }
Importer des données en Java

Flux tamponnés - performance

  • Améliore les performances en réduisant les opérations disque
  • Lire/écrire des flux de bytes avec BufferedInputStream et BufferedOutputStream
  • Lire/écrire des flux de caractères avec BufferedReader, BufferedWriter
    • Lire une ligne entière avec readLine()
Importer des données en Java

Flux tamponnés - performance

try (BufferedReader reader = new BufferedReader(new FileReader("data.csv"))) {
    // Traitement de l'en-tête
    String header = reader.readLine();
    System.out.println("En-tête : " + header);

// Lecture efficace des données String line; int count = 0; while ((line = reader.readLine()) != null) { count++; } System.out.println("Lues " + count + " lignes de données"); } catch (Exception e) { System.out.println("Erreur : " + e.getMessage()); }
Importer des données en Java

Chaînage de flux

  • Chaque flux de la chaîne ajoute une fonctionnalité spécifique
  • Modèle courant : FileInputStream -> InputStreamReader -> BufferedReader
  • Toujours fermer le flux le plus externe (les autres se ferment automatiquement)
Importer des données en Java

Chaînage de flux

import java.nio.charset.StandardCharsets;
try (

BufferedReader reader = new BufferedReader(
new InputStreamReader(
new FileInputStream("data.csv"),
StandardCharsets.UTF_8 )
)
) { String line; while ((line = reader.readLine()) != null) { System.out.println(line);} } catch (Exception e) { System.err.println("Erreur : " + e.getMessage()); }
Importer des données en Java

Gestion des exceptions

  • Crucial pour les opérations I/O
  • Exceptions courantes : IOException, FileNotFoundException
  • Toujours utiliser try-with-resources pour gérer les exceptions
Importer des données en Java

Gestion des exceptions

import java.util.ArrayList;
import java.util.List;
public static List<String> readLines(String filePath) throws IOException {

List<String> lines = new ArrayList<>(); try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { String line; while ((line = reader.readLine()) != null) { lines.add(line); } } // Flux fermé automatiquement ici return lines;
}
Importer des données en Java

Passons à la pratique !

Importer des données en Java

Preparing Video For Download...