Exceptions
📁 Prog 12
Génériques
📂

Les Fichiers (I/O)

Les données vivent en RAM... mais disparaissent à l'arrêt ! Les fichiers permettent de sauvegarder et charger des données de façon permanente.

Le cycle de vie d'un fichier

Un fichier s'ouvre, se lit ou s'écrit, puis se ferme. Avance étape par étape : tant que le fichier reste ouvert, il est verrouillé. Le fermer libère la ressource.

📂 open() ✍️ read / write 🔒 close() Fichier : fermé

Clique sur « Étape suivante » pour ouvrir le fichier.

🗄️ Analogie : Le Classeur de Bureau

📖

READ

Ouvrir le classeur et lire un document

✏️

WRITE

Créer ou remplacer un document

📝

APPEND

Ajouter à la fin d'un document existant

💡 Important : Toujours fermer le classeur après usage ! En programmation, on utilise close() ou le pattern try-with-resources.

🌊 Les Streams : Flux de Données

Un Stream est comme un tuyau : les données coulent d'une source vers une destination.

📄 Fichier
📦
💾 Programme

📥 InputStream (Lecture)

Fichier → Programme

FileReader, BufferedReader

📤 OutputStream (Écriture)

Programme → Fichier

FileWriter, BufferedWriter

🎮 Démo Interactive : Opérations sur Fichier

📁 Système de fichiers (simulé)

📁 /home/user/
📄 notes.txt
📄 config.json
📄 log.txt

📝 Contenu actuel :

Bonjour le monde ! Ceci est un fichier texte. Ligne 3.

✏️ Éditeur

notes.txt

📝 Lecture/Écriture de Fichiers

📖 Lecture

// Java 11+ : Files.readString (simple)
String content = Files.readString(Path.of("fichier.txt"));

// Ou ligne par ligne avec try-with-resources
try (BufferedReader reader = new BufferedReader(
        new FileReader("fichier.txt"))) {
    String line;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
} // Fermeture automatique !

✏️ Écriture

// Java 11+ : Files.writeString (simple)
Files.writeString(Path.of("fichier.txt"), "Contenu");

// Append (ajouter à la fin)
Files.writeString(Path.of("fichier.txt"), "Nouvelle ligne\n",
    StandardOpenOption.APPEND);

🔄 JSON : Le Format Universel

JSON (JavaScript Object Notation) est LE format standard pour échanger des données entre programmes.

📄 Fichier JSON

{
  "nom": "Alice",
  "age": 25,
  "actif": true,
  "scores": [95, 87, 92]
}

💻 Équivalent Objet

// Python
user = {
    "nom": "Alice",
    "age": 25,
    "actif": True,
    "scores": [95, 87, 92]
}

📥 Lire JSON

# Python
import json
with open("data.json") as f:
    data = json.load(f)

// JavaScript
const data = JSON.parse(content);

// Java
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(file, User.class);

📤 Écrire JSON

# Python
with open("data.json", "w") as f:
    json.dump(data, f, indent=2)

// JavaScript
const json = JSON.stringify(data, null, 2);

// Java
mapper.writeValue(file, user);

🛤️ Chemins de Fichiers

📍 Chemin Absolu

Depuis la racine du système

/home/user/projets/app/data.txt C:\Users\Alice\Documents\data.txt

✓ Toujours le même fichier

📍 Chemin Relatif

Depuis le dossier courant

./data/config.json ../parent/file.txt

✓ Portable entre machines

⚠️ Attention Windows vs Unix !

Windows : C:\Users\file.txt (backslash)
Unix/Mac : /home/user/file.txt (slash)

💡 Utilise Path.of() (Java), os.path.join() (Python), path.join() (Node.js) pour la portabilité !

🧠

Mode Survie : Fichiers

Une erreur = Game Over ! 10 questions aléatoires.

🎬

Pour aller plus loin

Les excellentes vidéos de Graven sur les fichiers :

Java Fichiers
Apprendre le Java #15 - Les Fichiers
Graven • ☕ Java
Python Fichiers
Apprendre le Python #10 - Les Fichiers
Graven • 🐍 Python
Glisser pour continuer vers 🧬 Génériques <T>
⬇️
Avancé