Méthode move() de java.nio.file.Files en Java
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
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 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 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 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 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 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
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
- 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.
- Liens symboliques: Par défaut, les liens symboliques sont suivis, sauf indication contraire
LinkOption.NOFOLLOW_LINKS - 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.
- Attributs de fichier: Les opérations de déplacement préservent généralement les attributs de base du fichier.
- 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
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
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 java.nio.file.Files