Java - Renommer ou déplacer un fichier

1. Vue d'ensemble

Dans ce tutoriel rapide, nous allons examiner le changement de nom / déplacement d'un fichier en Java.

Nous examinerons d'abord l'utilisation des classes Files et Path de NIO, puis de la classe Java File , de Google Guava et enfin de la bibliothèque Apache Commons IO.

Cet article fait partie de la série « Java - Back to Basic » ici sur Baeldung.

2. Configuration

Dans les exemples, nous utiliserons la configuration suivante, qui consiste en 2 constantes pour le nom du fichier source et de destination et une étape de nettoyage pour pouvoir exécuter les tests plusieurs fois:

private final String FILE_TO_MOVE = "src/test/resources/originalFileToMove.txt"; private final String TARGET_FILE = "src/test/resources/targetFileToMove.txt"; @BeforeEach public void createFileToMove() throws IOException { File fileToMove = new File(FILE_TO_MOVE); fileToMove.createNewFile(); } @AfterEach public void cleanUpFiles() { File targetFile = new File(TARGET_FILE); targetFile.delete(); }

3. Utilisation des chemins NIO et des classes de fichiers

Commençons par utiliser la méthode Files.move () du package Java NIO:

@Test public void givenUsingNio_whenMovingFile_thenCorrect() throws IOException { Path fileToMovePath = Paths.get(FILE_TO_MOVE); Path targetPath = Paths.get(TARGET_FILE); Files.move(fileToMovePath, targetPath); }

Dans JDK7, le package NIO a été considérablement mis à jour et la classe Path a été ajoutée. Cela fournit des méthodes pour une manipulation pratique des artefacts du système de fichiers.

Notez que le fichier et le répertoire cible doivent exister.

4. Utilisation de la classe de fichiers

Voyons maintenant comment nous pouvons faire de même en utilisant la méthode File.renameTo () :

@Test public void givenUsingFileClass_whenMovingFile_thenCorrect() throws IOException { File fileToMove = new File(FILE_TO_MOVE); boolean isMoved = fileToMove.renameTo(new File(TARGET_FILE)); if (!isMoved) { throw new FileSystemException(TARGET_FILE); } }

Dans cet exemple, le fichier à déplacer existe, ainsi que le répertoire cible.

Notez que renameTo () ne lève que deux types d'exceptions:

  • SecurityException - si un gestionnaire de sécurité refuse l'accès en écriture à la source ou à la destination
  • NullPointerException - au cas où la cible du paramètre est nulle

Si la cible n'existe pas dans un système de fichiers - aucune exception ne sera levée - et vous devrez vérifier l'indicateur de réussite renvoyé par la méthode.

5. Utilisation de la goyave

Ensuite - jetons un coup d'œil à la solution Guava, qui fournit une méthode Files.move () pratique :

@Test public void givenUsingGuava_whenMovingFile_thenCorrect() throws IOException { File fileToMove = new File(FILE_TO_MOVE); File targetFile = new File(TARGET_FILE); com.google.common.io.Files.move(fileToMove, targetFile); }

Encore une fois, dans cet exemple, le fichier à déplacer et le répertoire cible doivent exister.

6. Avec Commons IO

Enfin, jetons un coup d'œil à une solution avec Apache Commons IO - probablement la plus simple:

@Test public void givenUsingApache_whenMovingFile_thenCorrect() throws IOException { FileUtils.moveFile(FileUtils.getFile(FILE_TO_MOVE), FileUtils.getFile(TARGET_FILE)); }

Cette ligne unique permettra bien sûr à la fois de déplacer ou de renommer, selon que le répertoire cible est le même ou non.

Alternativement - voici une solution pour déplacer spécifiquement, nous permettant également de créer automatiquement le répertoire de destination s'il n'existe pas déjà:

@Test public void givenUsingApache_whenMovingFileApproach2_thenCorrect() throws IOException { FileUtils.moveFileToDirectory( FileUtils.getFile("src/test/resources/fileToMove.txt"), FileUtils.getFile("src/main/resources/"), true); }

6. Conclusion

Dans cet article, nous avons examiné différentes solutions pour déplacer un fichier en Java. Nous nous sommes concentrés sur le changement de nom dans ces extraits de code, mais le déplacement est, bien sûr, le même, seul le répertoire cible doit être différent.

Le code des exemples est disponible à l'adresse over sur GitHub.