1. Introduction
En programmation, il faut presque toujours travailler avec des fichiers. Des exemples parlants pour tous : enregistrer le texte d’une note, la progression d’un jeu, copier une image ou lire des paramètres depuis un fichier de configuration.
En Java, il existe des outils modernes et pratiques : Path et Files du package java.nio.file. Ils permettent, en quelques lignes de code, d’ouvrir un fichier, lire son contenu, écrire du texte ou même copier une image.
Chemin d’accès au fichier (Path)
Un fichier se trouve toujours quelque part sur le disque, et pour y accéder, il faut préciser un chemin. Pour cela, Java propose la classe Path, et vous pouvez créer un nouvel objet à l’aide de la méthode Path.of().
Path path = Path.of("hello.txt"); // chemin relatif
Path absPath = Path.of("C:/Users/Me/image.png"); // chemin absolu (Windows)
Explications :
- Le chemin relatif cherche le fichier dans le dossier courant du projet (par exemple, "hello.txt").
- Un chemin absolu indique l’adresse complète : disque, dossiers et nom du fichier.
2. Travailler avec des fichiers texte
Du point de vue de Java, tous les fichiers se répartissent en 2 types — texte et binaire. Si le contenu peut être représenté comme un texte compréhensible par un humain, c’est un fichier texte. Dans tous les autres cas, c’est simplement un ensemble d’octets (fichier binaire).
Écrire du texte dans un fichier — writeString
Pour écrire une chaîne dans un fichier, on utilise la méthode writeString.
Path p = Path.of("hello.txt");
Files.writeString(p, "Bonjour, fichier !");
Que s’est-il passé ici :
- nous créons un objet Path qui pointe vers "hello.txt" ;
- nous écrivons la chaîne dedans avec la méthode writeString ;
- si le fichier n’existait pas, il sera créé automatiquement.
Ainsi, vous pouvez facilement enregistrer des notes ou des messages dans un fichier texte.
Lire du texte depuis un fichier — readString
La méthode readString permet de charger tout le fichier d’un coup dans une chaîne.
Path p = Path.of("hello.txt");
String content = Files.readString(p);
System.out.println(content);
La variable content contient désormais le contenu du fichier. C’est pratique pour les petits fichiers : configurations, textes, documents JSON.
3. Travailler avec des fichiers binaires
Tous les fichiers ne sont pas du texte. Les images, la musique, les archives — ce sont des ensembles d’octets. Pour les manipuler, il existe les méthodes write et readAllBytes.
Écrire des octets dans un fichier — write
La méthode write() permet d’écrire dans un fichier un tableau d’octets. On l’appelle aussi un tampon (byte buffer).
byte[] data = {65, 66, 67, 68}; // caractères A B C D
Files.write(Path.of("letters.bin"), data);
Ici, nous avons écrit dans le fichier un tableau d’octets. Si vous ouvrez le fichier comme du texte, il contiendra les lettres "ABCD".
Lire des octets — readAllBytes
Pour récupérer le contenu du fichier sous forme de tableau d’octets, utilisez la méthode readAllBytes.
byte[] buffer = Files.readAllBytes(Path.of("letters.bin"));
// afficher le tableau d'octets lu à l'écran
for (byte b : buffer)
{
System.out.print((char)b + " ");
}
À l’écran, vous verrez :
A B C D
Cette approche est utilisée pour travailler avec n’importe quel fichier binaire — images, documents, musique.
4. Scénarios courants de manipulation de fichiers
Le scénario de travail avec les fichiers le plus courant est sans doute la copie d’un fichier.
Copie de fichiers
Pour copier un fichier, il suffit de le lire dans un tableau d’octets et d’écrire ce tableau dans un autre fichier.
Path in = Path.of("logo.png");
Path out = Path.of("logo_copy.png");
byte[] bytes = Files.readAllBytes(in);
Files.write(out, bytes);
De cette manière, vous pouvez copier des images, des documents et tout autre fichier sans vous soucier de leur format.
Vérification de l’existence et de la taille
Il faut parfois s’assurer qu’un fichier existe et connaître sa taille. Pour cela, utilisez les méthodes exists et size.
Path p = Path.of("hello.txt");
if (Files.exists(p))
{
long size = Files.size(p);
System.out.println("Fichier trouvé, taille : " + size + " octets");
}
else
{
System.out.println("Fichier introuvable !");
}
C’est utile pour le diagnostic : vous saurez exactement si vous travaillez avec le bon fichier.
5. Exceptions
Les opérations sur les fichiers peuvent échouer : fichier absent, droits d’accès insuffisants, disque plein ou fichier occupé par un autre programme. Il faut donc entourer le travail avec le disque d’un try-catch, ou bien propager les exceptions vers l’extérieur à l’aide de throws.
try
{
String content = Files.readString(Path.of("hello.txt"));
System.out.println(content);
}
catch (IOException e)
{
System.out.println("Erreur de lecture : " + e.getMessage());
}
Ainsi, le programme ne « plantera » pas, mais informera proprement l’utilisateur de ce qui s’est passé. Si nécessaire, vous pouvez propager l’exception IOException plus haut dans la pile depuis une méthode à l’aide du mot-clé throws.
GO TO FULL VERSION