Fichiers en Java : du débutant au pro en 20 minutes

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Pourquoi travailler avec des fichiers en Java n'est pas effrayant ?

\n\n

Chaque développeur, même s'il écrit uniquement du backend en Java, finit tôt ou tard par devoir sauvegarder des données, lire une configuration ou traiter un journal. Travailler avec des fichiers et le système de fichiers en Java est une compétence de base qui transforme les applications console « jouets » en véritables utilitaires. Et oui, en 2024, nous n'avons pas seulement le bon vieux File, mais aussi le puissant java.nio.file.

\n\n

Dans cet article, nous allons tout détailler : de l'ouverture d'un bloc-notes à la manipulation des droits d'accès. C'est parti !

\n\n

1. L'approche classique : java.io.File

\n\n

Commençons par l'ancêtre. La classe File est apparue dans Java 1.0 et est encore utilisée aujourd'hui. Mais soyons honnêtes : elle concerne davantage les métadonnées que le contenu. Avec elle, on peut vérifier si un fichier existe, créer un dossier, obtenir la liste des fichiers.

\n\n
import java.io.File;\n\npublic class FileExample {\n    public static void main(String[] args) {\n        File file = new File("/home/user/docs/notes.txt");\n        \n        System.out.println("Le fichier existe : " + file.exists());\n        System.out.println("Chemin absolu : " + file.getAbsolutePath());\n        System.out.println("Taille : " + file.length() + " octets");\n        \n        // Création d'un répertoire\n        File dir = new File("/home/user/new_folder");\n        if (dir.mkdir()) {\n            System.out.println("Dossier créé");\n        }\n    }\n}
\n\n

Inconvénient : File ne sait pas lire correctement les gros fichiers — pour cela, il faut des flux. Et il ne prend pas en charge les liens symboliques (soft links) nativement. C'est pourquoi Sun (puis Oracle) a publié NIO.

\n\n

2. Lecture de fichiers : d'InputStream à BufferedReader

\n\n

La lecture est l'opération la plus courante. Si le fichier est textuel, utilisez BufferedReader — il met en mémoire tampon les données et fonctionne rapidement.

\n\n
import java.io.BufferedReader;\nimport java.io.FileReader;\nimport java.io.IOException;\n\npublic class ReadFile {\n    public static void main(String[] args) {\n        try (BufferedReader br = new BufferedReader(new FileReader("data.txt"))) {\n            String line;\n            while ((line = br.readLine()) != null) {\n                System.out.println(line);\n            }\n        } catch (IOException e) {\n            System.err.println("Erreur de lecture : " + e.getMessage());\n        }\n    }\n}
\n\n

Pour les fichiers binaires (images, archives), utilisez FileInputStream :

\n\n
import java.io.FileInputStream;\nimport java.io.IOException;\n\npublic class ReadBinary {\n    public static void main(String[] args) {\n        try (FileInputStream fis = new FileInputStream("image.png")) {\n            byte[] buffer = new byte[1024];\n            int bytesRead;\n            while ((bytesRead = fis.read(buffer)) != -1) {\n                // traiter le bloc buffer[0..bytesRead]\n            }\n        } catch (IOException e) {\n            e.printStackTrace();\n        }\n    }\n}
\n\n

Important : utilisez toujours try-with-resources — cela garantit la fermeture du flux, même en cas d'exception.

\n\n

3. Écriture dans un fichier : BufferedWriter et FileOutputStream

\n\n

L'écriture est presque symétrique à la lecture. Pour le texte — BufferedWriter, pour les données binaires — FileOutputStream.

\n\n
import java.io.BufferedWriter;\nimport java.io.FileWriter;\nimport java.io.IOException;\n\npublic class WriteFile {\n    public static void main(String[] args) {\n        try (BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {\n            bw.write("Bonjour, le monde !");\n            bw.newLine();\n            bw.write("Java est puissant.");\n        } catch (IOException e) {\n            e.printStackTrace();\n        }\n    }\n}
\n\n

Si vous devez ajouter à la fin du fichier au lieu de l'écraser

Blogs

Book Recommendations