Méthode move() de java.nio.file.Files en Java

Java File Java java.nio.file.Files


java.nio.file.Files.move()La méthode est la méthode centrale du package Java NIO (New I/O) pour déplacer ou renommer des fichiers et des répertoires. Elle offre, par rapport auxjava.io.Fileclasses traditionnelles, des capacités de manipulation de fichiers plus puissantes et flexibles.

Syntaxe de la méthode

public static Path move(Path source, Path target, CopyOption... options) throws IOException

Description du paramètre

Nom du paramètre Type Description
source Chemin Chemin du fichier ou du répertoire source à déplacer
target Chemin Le chemin de destination
options CopyOption... Options de déplacement facultatives (varargs)

Options CopyOption courantes

  • StandardCopyOption.REPLACE_EXISTING: Si le fichier cible existe déjà, le remplacer.
  • StandardCopyOption.ATOMIC_MOVE: Garantit que l'opération de déplacement est atomique.
  • LinkOption.NOFOLLOW_LINKS: Ne suit pas les liens symboliques.

Détails de la méthode/fonction

Déplacement de fichier de base

L'opération de déplacement la plus simple, déplacer un fichier d'un emplacement à un autre :

Exemple

Path source = Paths.get("C:/temp/source.txt");
Path target = Paths.get("C:/temp2/target.txt");
Files.move(source, target);

Renommage de fichiers

La méthode move peut également être utilisée pour renommer des fichiers :

Exemple

Path source = Paths.get("C:/temp/oldname.txt");
Path target = Paths.get("C:/temp/newname.txt");
Files.move(source, target);

Déplacement de répertoire

Déplacer un répertoire entier (y compris son contenu) :

Exemple

Path sourceDir = Paths.get("C:/temp/mydir");
Path targetDir = Paths.get("C:/temp2/mydir");
Files.move(sourceDir, targetDir);

Utilisation avancée

Écraser les fichiers existants

UtilisationREPLACE_EXISTINGoption pour écraser une destination :

Exemple

Path source = Paths.get("C:/temp/source.txt");
Path target = Paths.get("C:/temp2/target.txt");
Files.move(source, target, StandardCopyOption.REPLACE_EXISTING);

Déplacement atomique

Assurez-vous que l'opération de déplacement est atomique (soit elle réussit complètement, soit elle échoue complètement) :

Exemple

Path source = Paths.get("C:/temp/source.txt");
Path target = Paths.get("C:/temp2/target.txt");
Files.move(source, target, StandardCopyOption.ATOMIC_MOVE);

Gestion des exceptions

move()La méthode peut lever les exceptions suivantes :

  • IOException: Levée lorsqu'une erreur d'E/S se produit.
  • FileAlreadyExistsException: Le fichier cible existe déjà et aucuneREPLACE_EXISTINGoption n'est spécifiée.
  • DirectoryNotEmptyException: Tentative de déplacement d'un répertoire non vide vers un système de fichiers différent.

Approche recommandée pour la gestion des exceptions :

Exemple

try {
    Path source = Paths.get("C:/temp/source.txt");
    Path target = Paths.get("C:/temp2/target.txt");
    Files.move(source, target, StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
    System.err.println("Erreur lors du déplacement du fichier : " + e.getMessage());
    e.printStackTrace();
}

Notes

  1. Déplacement entre systèmes de fichiers: Lorsque vous déplacez des fichiers entre différents systèmes de fichiers, il s'agit en réalité d'une opération de copie + suppression.
  2. Liens symboliques: Par défaut, les liens symboliques sont suivis, sauf indication contraireLinkOption.NOFOLLOW_LINKS
  3. Restrictions de déplacement de répertoire: Impossible de déplacer un répertoire dans lui-même ou dans un de ses sous-répertoires.
  4. Attributs de fichier: Les opérations de déplacement préservent généralement les attributs de base du fichier.
  5. Considérations de performance: Le déplacement au sein d'un même système de fichiers est généralement beaucoup plus rapide que le déplacement entre systèmes de fichiers.

Exemples d'applications pratiques

Déplacer des fichiers en toute sécurité

Exemple

public static boolean safeMoveFile(Path source, Path target) {
    try {
        // Essayer un déplacement atomique
        Files.move(source, target, StandardCopyOption.ATOMIC_MOVE);
        return true;
    } catch (AtomicMoveNotSupportedException e) {
        try {
            // Lorsqu'un déplacement atomique n'est pas pris en charge, utiliser un déplacement normal + écrasement
            Files.move(source, target, StandardCopyOption.REPLACE_EXISTING);
            return true;
        } catch (IOException ex) {
            System.err.println("Failed to move file: " + ex.getMessage());
            return false;
        }
    } catch (IOException e) {
        System.err.println("Failed to move file: " + e.getMessage());
        return false;
    }
}

Déplacement de fichiers par lots

Exemple

public static void batchMoveFiles(Path sourceDir, Path targetDir, String filePattern)
    throws IOException {
   
    try (DirectoryStream<Path> stream = Files.newDirectoryStream(sourceDir, filePattern)) {
        for (Path sourceFile : stream) {
            Path targetFile = targetDir.resolve(sourceFile.getFileName());
            Files.move(sourceFile, targetFile);
        }
    }
}

Java File Java java.nio.file.Files

Autres extensions