Exercices sur les Entrées/Sorties (I/O) en Java

Section 1 : Questions de cours (10 questions)

  1. Qu'est-ce qu'un flux (Stream) en Java, et quels sont les deux types de flux principaux ?
  2. Décrivez les étapes de l'utilisation d'un flux pour lire ou écrire des données dans un fichier.
  3. Quelle est la différence entre un flux binaire (Byte Stream) et un flux de caractères (Character Stream) ? Donnez un exemple de classes pour chacun.
  4. Expliquez comment la classe BufferedReader est utilisée pour lire un fichier texte ligne par ligne. Quelle est l'importance de la méthode readLine() ?
  5. Quelles sont les différentes méthodes offertes par la classe Scanner pour lire et analyser des données provenant d'un fichier ?
  6. Quelles sont les exceptions courantes liées aux opérations d'I/O en Java, et comment pouvez-vous les gérer dans un programme ?
  7. Quel est le rôle de la classe PrintWriter dans l'écriture de fichiers ? Comment est-elle utilisée avec un BufferedWriter ?
  8. Quelle est la différence entre les flux System.in, System.out, et System.err en Java ?
  9. Comment la méthode printf() est-elle utilisée pour formater la sortie écrite dans un fichier ? Donnez un exemple de son utilisation avec des variables.
  10. Expliquez comment importer et utiliser les classes du package java.io dans un programme Java. Pourquoi est-il parfois nécessaire d'importer java.util.Scanner ?

Section 2 : Analyse d'un code Java (10 questions)

Considérez le code suivant, qui lit un fichier texte et affiche certaines lignes conditionnellement :

import java.io.*;

public class FileReaderExample {
    public static void main(String[] args) {
        String filename = "C:\\Temp\\TestIn.txt";
        try {
            BufferedReader reader = new BufferedReader(new FileReader(filename));
            String line;
            while ((line = reader.readLine()) != null) {
                if (line.startsWith("#")) {
                    System.out.println("Commentaire détecté : " + line);
                } else {
                    System.out.println("Contenu : " + line);
                }
            }
            reader.close();
        } catch (IOException e) {
            System.err.println("Erreur lors de la lecture du fichier : " + e.getMessage());
        }
    }
}
  1. Quel est le rôle de la classe BufferedReader dans ce programme ? Pourquoi est-elle préférée à FileReader seul ?
  2. À quoi sert la méthode readLine() dans ce programme ? Quelle est sa sortie quand le fichier est vide ?
  3. Qu'arrive-t-il si le fichier spécifié dans filename n'existe pas ? Quel type d'exception est levé et comment est-elle gérée dans le programme ?
  4. Pourquoi la méthode close() est-elle nécessaire après la lecture du fichier ? Que se passerait-il si elle était omise ?
  5. Expliquez la condition line.startsWith("#"). Que signifie cette ligne dans le contexte de ce programme ?
  6. Que se passe-t-il si une ligne vide est rencontrée dans le fichier ? Comment le programme la gère-t-il ?
  7. Dans ce programme, quelles sont les alternatives à l'utilisation de System.err pour afficher les messages d'erreur ?
  8. Modifiez le programme pour que les lignes non commentées soient également écrites dans un nouveau fichier texte output.txt.
  9. Pourquoi le bloc try-catch est-il utilisé ici ? Quelle est la différence entre une exception IOException et une autre exception Java comme NullPointerException ?
  10. Comment modifieriez-vous ce programme pour utiliser un Scanner au lieu de BufferedReader pour lire les lignes du fichier ?

Section 3 : Écriture d'un code Java (10 questions)

  1. Écrivez un programme Java qui demande à l'utilisateur de saisir un nom de fichier, puis affiche tout le contenu du fichier ligne par ligne à l'écran. Utilisez un BufferedReader pour lire le fichier.
  2. Écrivez un programme Java qui écrit les lignes "Hello World" et "Ceci est un test" dans un fichier texte nommé output.txt en utilisant la classe PrintWriter.
  3. Créez un programme Java qui lit les entrées clavier et les enregistre dans un fichier texte nommé input.txt jusqu'à ce que l'utilisateur entre la chaîne "exit". Utilisez un BufferedWriter pour écrire dans le fichier.
  4. Écrivez un programme Java qui lit un fichier texte et compte le nombre total de lignes qu'il contient.
  5. Modifiez un programme Java pour lire un fichier texte et afficher uniquement les lignes qui contiennent plus de 20 caractères. Utilisez BufferedReader.
  6. Écrivez un programme qui lit un fichier CSV (Comma-Separated Values) ligne par ligne, divise chaque ligne en colonnes (en utilisant split()), et affiche le contenu de chaque colonne.
  7. Écrivez un programme Java qui lit un fichier texte et calcule le nombre de mots dans le fichier. Utilisez Scanner pour lire les lignes et les mots.
  8. Créez un programme qui lit le contenu d'un fichier texte et remplace toutes les occurrences d'un mot spécifique par un autre mot. Les mots doivent être fournis par l'utilisateur.
  9. Écrivez un programme Java pour vérifier si un fichier spécifié existe avant d'essayer de le lire. Si le fichier existe, affichez son contenu, sinon affichez un message d'erreur.
  10. Créez un programme Java qui copie le contenu d'un fichier source à un fichier de destination en utilisant FileInputStream et FileOutputStream.

CORRECTION :

 

Rappels de Fonctions Utiles en Java

1. Classes pour la gestion des fichiers

  • File : Représente un chemin de fichier ou de répertoire.
    • exists() : Vérifie si le fichier ou répertoire existe.
    • createNewFile() : Crée un nouveau fichier.
    • mkdir() / mkdirs() : Crée un répertoire unique / plusieurs répertoires.
    • delete() : Supprime un fichier ou un répertoire.
  • FileInputStream : Lit les octets d'un fichier.
    • read() : Lit un octet du fichier.
    • read(byte[] b) : Lit les octets dans un tableau.
  • FileOutputStream : Écrit des octets dans un fichier.
    • write(int b) : Écrit un octet dans le fichier.
    • write(byte[] b) : Écrit un tableau d'octets dans le fichier.

2. Sérialisation et désérialisation

  • Serializable : Interface qui marque une classe comme étant sérialisable.
  • ObjectOutputStream : Écrit des objets sérialisés dans un fichier ou un flux.
    • writeObject(Object obj) : Sérialise et écrit l'objet `obj` dans le flux.
  • ObjectInputStream : Lit des objets sérialisés à partir d'un fichier ou flux.
    • readObject() : Désérialise et retourne l'objet lu à partir du flux.

3. Classes pour la lecture et l'écriture de fichiers texte

  • FileReader : Lit des caractères d'un fichier texte.
    • read() : Lit un seul caractère.
    • read(char[] cbuf) : Lit des caractères dans un tableau de caractères.
  • FileWriter : Écrit des caractères dans un fichier texte.
    • write(String str) : Écrit une chaîne de caractères dans le fichier.
    • write(char[] cbuf) : Écrit un tableau de caractères dans le fichier.
  • BufferedReader : Permet de lire du texte de manière plus efficace (avec un tampon).
    • readLine() : Lit une ligne entière de texte.
  • BufferedWriter : Permet d'écrire du texte de manière plus efficace (avec un tampon).
    • write(String str) : Écrit une chaîne de caractères dans le fichier avec un tampon.

4. Gestion des exceptions d'I/O

  • IOException : Exception de base pour les erreurs d'entrée/sortie.
  • FileNotFoundException : Exception levée lorsque le fichier est introuvable.
  • EOFException : Exception levée lorsqu'on atteint la fin d'un fichier.

5. Gestion des tampons (buffers)

  • BufferedInputStream : Lit des octets à partir d'un flux d'entrée avec un tampon.
    • read() : Lit un octet du flux avec tampon.
  • BufferedOutputStream : Écrit des octets dans un flux de sortie avec un tampon.
    • write(int b) : Écrit un octet dans le flux avec tampon.

6. Classes avancées pour la manipulation de fichiers

  • Files (package java.nio.file) : Classe utilitaire pour la manipulation de fichiers.
    • readAllBytes(Path path) : Lit tous les octets d'un fichier.
    • write(Path path, byte[] bytes) : Écrit des octets dans un fichier.
    • copy(Path source, Path target) : Copie un fichier.
    • move(Path source, Path target) : Déplace ou renomme un fichier.
  • Paths : Classe utilitaire pour créer des objets Path à partir de chaînes de caractères.
    • get(String first, String... more) : Crée un objet Path.

7. Opérations asynchrones et multithreading avec les fichiers

  • Thread : Classe de base pour créer et gérer des threads en Java.
    • start() : Démarre l'exécution d'un thread.
  • Callable<V> : Interface pour créer des threads qui renvoient un résultat.
    • call() : Méthode exécutée par un thread Callable qui retourne un résultat.
  • ExecutorService : Interface pour gérer des pools de threads.
    • submit(Callable<V> task) : Soumet une tâche pour exécution par un pool de threads.
    • shutdown() : Termine l'exécution des threads du pool.

8. Gestion des canaux I/O (Channels)

  • FileChannel : Classe pour gérer les entrées/sorties de fichiers de manière plus efficace (utilisée dans java.nio).
    • open(Path path, OpenOption... options) : Ouvre un fichier pour lecture/écriture avec les options spécifiées.
    • read(ByteBuffer dst) : Lit les données dans un tampon ByteBuffer.
    • write(ByteBuffer src) : Écrit les données du tampon dans un fichier.

9. Autres classes utiles

  • Scanner : Classe pour lire des entrées (comme des fichiers texte ou des entrées clavier).
    • nextLine() : Lit une ligne de texte.
    • nextInt() : Lit un entier à partir de l'entrée.
  • PrintWriter : Classe pour écrire des chaînes de caractères dans des fichiers ou d'autres sorties.
    • print() et println() : Écrit des données avec ou sans retour à la ligne.

 

 

Si vous avez trouvé les exercices corrigés en Java de Mr JoëlYk intéressants et utiles, pourquoi ne pas les partager avec d'autres personnes qui pourraient également en bénéficier ? Partagez ce lien sur les réseaux sociaux ou envoyez-le à vos amis et collègues. Vous pourriez aider quelqu'un à améliorer ses compétences en programmation ou à trouver des solutions à des problèmes complexes. N'oubliez pas que la connaissance doit être partagée pour grandir. Merci pour votre soutien et votre partage !

Contact WhatsApp : +237 652027193 | Réaliser Par Joël_Yk

Exercices de Manipulation des Flux en Java
Aucune note. Soyez le premier à attribuer une note !

Ajouter un commentaire

Anti-spam