Operations de Fichiers en Java : Guide Complet IO et NIO avec Exemples

Maitrisez les operations fichiers en Java avec IO et NIO. Apprenez File, Path, Files, Channels pour lire, ecrire et copier des fichiers efficacement.

Mahmoud DEVO
Mahmoud DEVO
December 27, 2025 3 min read
Operations de Fichiers en Java : Guide Complet IO et NIO avec Exemples

Opérations de fichier avec Java : une introduction

Introduction

Lorsque vous développez des applications avec Java, il est souvent nécessaire d’interagir avec les fichiers sur le système de fichiers. Que ce soit pour lire ou écrire des données, copier des fichiers, ou même simplement vérifier l’existence de fichier, la bibliothèque java.io et java.nio.file fournit les outils nécessaires pour réaliser ces opérations.

Dans cet article, nous allons explorer les différentes façons d’interagir avec les fichiers en Java. Nous aborderons notamment les classes File, Path, Files et Channels qui sont les fondements de l’API de fichier Java.

Convertir entre File et Path

La première chose à savoir est que les classes File et Path sont deux façons différentes de représenter un chemin de fichier. La classe File est une représentation traditionnelle d’un chemin de fichier, tandis que la classe Path est plus récente et fournit une API plus flexible.

Pour convertir une instance de File en instance de Path, vous pouvez utiliser la méthode toPath() :

File file = new File("C:/");
Path path = file.toPath();

Et pour l’inverse, vous pouvez utiliser la méthode toFile() :

Path path = Paths.get("C:/");
File file = path.toFile();

Vérifier si un fichier existe et le supprimer

Il est souvent nécessaire de vérifier si un fichier existe avant d’y accéder. Pour cela, vous pouvez utiliser la méthode exists() de la classe File :

if (file.exists()) {
    boolean deleted = file.delete();
    if (!deleted) {
        throw new IOException("Impossible de supprimer le fichier");
    }
}

De même, vous pouvez utiliser la méthode deleteIfExists() de la classe Files pour supprimer un fichier s’il existe :

Files.deleteIfExists(path);

Écrire dans un fichier via un OutputStream

Lorsque vous devez écrire des données dans un fichier, vous avez plusieurs options. Vous pouvez utiliser une instance de FileOutputStream, qui est plus simple à utiliser mais moins flexible. Ou bien, vous pouvez utiliser les méthodes write() et newOutputStream() de la classe Files :

try (OutputStream outputStream = Files.newOutputStream(path, StandardOpenOption.CREATE_NEW)) {
    for (String line : lines) {
        outputStream.write((line + System.lineSeparator()).getBytes(StandardCharsets.UTF_8));
    }
}

Iterer sur chaque fichier dans un dossier

Lorsque vous devez interagir avec tous les fichiers d’un dossier, vous pouvez utiliser la méthode listFiles() de la classe File ou les méthodes walkFileTree() et new FileVisitor() de la classe Files :

for (File selectedFile : folder.listFiles()) {
    System.out.println((selectedFile.isDirectory() ? "d" : "f") + " " + selectedFile.getAbsolutePath());
}

Ou bien, vous pouvez utiliser les méthodes walkFileTree() et new FileVisitor() de la classe Files :

Files.walkFileTree(directory, new SimpleFileVisitor<Path>() {
    @Override
    public FileVisitResult preVisitDirectory(Path selectedPath, BasicFileAttributes attrs) throws IOException {
        System.out.println("d " + selectedPath.toAbsolutePath());
        return FileVisitResult.CONTINUE;
    }

    @Override
    public FileVisitResult visitFile(Path selectedPath, BasicFileAttributes attrs) throws IOException {
        System.out.println("f " + selectedPath.toAbsolutePath());
        return FileVisitResult.CONTINUE;
    }
});

Lecture d’un image depuis un fichier

Lorsque vous devez lire une image depuis un fichier, vous pouvez utiliser la classe ImageIO :

try {
    Image img = ImageIO.read(new File("~/Desktop/cat.png"));
} catch (IOException e) {
    e.printStackTrace();
}

Lecture/écriture de fichiers avec FileInputStream/FileOutputStream

Lorsque vous devez lire ou écrire des données dans un fichier, vous pouvez utiliser les classes FileInputStream et FileOutputStream :

String filepath = "C:\\test.txt";
try (FileOutputStream fos = new FileOutputStream(filepath)) {
    byte[] buffer = "This will be written in test.txt".getBytes();
    fos.write(buffer, 0, buffer.length);
}

Ou bien, vous pouvez utiliser les méthodes readAllBytes() et write() de la classe Files :

String filepath = "C:\\test.txt";
try {
    byte[] data = Files.readAllBytes(path);
} catch (IOException e) {
    e.printStackTrace();
}

Copie d’un fichier avec Channel

Lorsque vous devez copier un fichier, vous pouvez utiliser les classes FileChannel et transferTo() :

public class FileCopier {
    public static void main(String[] args) {
        File sourceFile = new File("hello.txt");
        File sinkFile = new File("hello2.txt");
        copy(sourceFile, sinkFile);
    }

    public static void copy(File sourceFile, File destFile) {
        try (FileChannel srcChannel = new FileInputStream(sourceFile).getChannel();
             FileChannel sinkChanel = new FileOutputStream(destFile).getChannel()) {
            srcChannel.transferTo(0, srcChannel.size(), sinkChanel);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Conclusion

Dans cet article, nous avons vu les différentes façons d’interagir avec les fichiers en Java. Nous avons abordé les classes File, Path, Files et Channels qui sont les fondements de l’API de fichier Java.

Nous espérons que cet article vous aura été utile pour comprendre comment utiliser ces classes pour interagir avec les fichiers.

Étapes suivantes

  • Consultez la documentation officielle de Java pour en savoir plus sur les classes File, Path, Files et Channels.
  • Examinez les exemples de code fournis dans cet article pour comprendre comment utiliser ces classes.
  • Essayez d’implémenter les opérations de fichier décrites dans cet article dans votre propre projet Java.
Advertisement

In-Article Ad

Dev Mode

Share this article

Mahmoud DEVO

Mahmoud DEVO

Senior Full-Stack Developer

I'm a passionate full-stack developer with 10+ years of experience building scalable web applications. I write about Vue.js, Node.js, PostgreSQL, and modern DevOps practices.

Enjoyed this article?

Subscribe to get more tech content delivered to your inbox.

Related Articles