Java >> Tutoriel Java >  >> Java

Renommer ou déplacer un fichier ou un répertoire en Java

Apprenez à renommer un fichier ou un répertoire à un chemin spécifié ou déplacer vers un nouveau répertoire en Java. Nous apprendrons à utiliser les classes de Standard IO, New IO, Guava et Commons IO.

1. Utilisation de File.renameTo()

Comme le nom de la méthode le suggère, renameTo() renomme le fichier avec le nouveau nom ou déplace le fichier vers un nouvel emplacement de répertoire.

  • Le renameTo() renvoie vrai ou faux indiquant si le changement de nom a réussi ou non.
  • Il lève SecurityException s'il y a des problèmes d'accès en écriture avec l'ancien ou le nouveau fichier.
File originalFile = new File("c:/temp/demo.txt");
File renamedFile = new File("c:/temp/demoNew.txt");
File movedFile = new File("c:/temp/moved/demoNew.txt");

boolean isCopied = originalFile.renameTo(renamedFile);
boolean isMoved = renamedFile.renameTo(movedFile);

System.out.println(isCopied);	//true
System.out.println(isMoved);	//true

2. Files.move() des nouveaux OI

Le Files.move() est similaire à renameTo() sauf que ça marche avec le Path instances au lieu de Fichier instances.

  • Le déplacement() La méthode déplace ou renomme un fichier vers un fichier cible. Le déplacement d'un fichier copiera l'heure de la dernière modification au fichier cible si pris en charge
  • Si le fichier donné et les fichiers cibles sont identiques, cette méthode n'a aucun effet.
  • Si le fichier cible existe déjà, alors move() échouera. Nous pouvons utiliser StandardCopyOption.REPLACE_EXISTING dans de tels cas.
  • Pour effectuer toute l'opération de renommage ou de déplacement en tant qu'opération atomique unique, nous pouvons utiliser StandardCopyOption.ATOMIC_MOVE option. Si le déplacement ne peut pas être effectué en tant qu'opération de système de fichiers atomique (en cas de deux systèmes de fichiers différents), alors AtomicMoveNotSupportedException est lancé.
  • Si le fichier est un lien symbolique, le lien symbolique lui-même, et non la cible du lien, est déplacé.
  • Renommer un répertoire peut échouer s'il nécessite de déplacer les fichiers vers un nouvel emplacement, c'est-à-dire que le répertoire est déplacé vers un emplacement. S'il s'agit d'un simple renommage de répertoire au même endroit dans le système de fichiers, cela réussira.
Path file = Path.of("c:/temp/demo.txt");

//Rename in same directory
Files.move(file, file.resolveSibling("demoNew.txt"));

//Move to new directory
Path newDir = Path.of("c:/temp/moved/");
Files.move(file, newDir.resolve(file.getFileName()),
    StandardCopyOption.ATOMIC_MOVE, 
    StandardCopyOption.REPLACE_EXISTING);

3. Files.move() de Goyave

Ce Files.move() La méthode déplace un fichier d'un chemin à un autre. Cela s'applique au changement de nom et au déplacement, les deux opérations.

Nous devons veiller à ce que le chemin de destination soit le chemin cible du fichier lui-même ; pas seulement le nouveau nom du fichier ou le chemin d'accès au nouveau répertoire parent.

File originalFile = new File("c:/temp/demo.txt");
File renamedFile = new File("c:/temp/demoNew.txt");

com.google.common.io.Files.move(originalFile, renamedFile);
com.google.common.io.Files.move(renamedFile, movedFile);

4. FileUtils d'IO communs

Les FileUtils La classe fournit de nombreuses méthodes pour déplacer ou renommer les fichiers et répertoires selon les besoins.

  • déplacerRépertoire(Fichier srcDir, Fichier destDir) – déplace un répertoire vers la destination et supprime le répertoire source.
  • moveDirectoryToDirectory(File src, File destDir, boolean createDestDir) :Déplace un répertoire vers un autre répertoire et prend une option pour créer ou non le nouveau répertoire. Si createDestDir est faux et le nouveau répertoire ne peut pas être créé alors IOException sera lancé.
  • moveFile(Fichier srcFile, File destFile, CopyOption… copyOptions)  :déplace un fichier en préservant les attributs de fichier avec des options de copie facultatives.
  • moveFileToDirectory(File srcFile, File destDir, boolean createDestDir) :déplace un fichier dans un répertoire spécifié.
  • moveToDirectory(File src, File destDir, boolean createDestDir) :déplace un fichier ou un répertoire vers le répertoire de destination.
FileUtils.moveFile(originalFile, renamedFile);
    
File targetDirectory = new File("c:/temp/moved/");
FileUtils.moveFileToDirectory(originalFile, targetDirectory, true);

5. Conclusion

Dans ce court didacticiel, nous avons appris à renommer un fichier ou un répertoire ou à le déplacer vers un nouvel emplacement avec différentes options de copie.

Bien que les classes IO standard et les nouvelles classes IO offrent toutes sortes de fonctionnalités, la classe FileUtils de Common IO fournit des méthodes très spécifiques pour chaque type d'opération. Ces noms de méthode spécifiques communiquent très bien l'intention.

Bon Apprentissage !!


Balise Java