Java - Renommer ou déplacer un fichier

Java - Renommer ou déplacer un fichier

1. Vue d'ensemble

Dans ce rapide didacticiel, nous allons examinerrenaming / moving a File in Java - en utilisant d'abord JDK 6, puis JDK 7 avec NIO, Google Guava et enfin la bibliothèque Apache Commons IO.

Cet article fait partie dethe “Java – Back to Basic” series ici par exemple.

Lectures complémentaires:

Comment copier un fichier avec Java

Jetez un coup d'œil aux méthodes courantes de copie de fichiers en Java.

Read more

Introduction à l'API de fichier Java NIO2

Guide rapide et pratique sur l'API de fichier Java NIO2

Read more

Taille du fichier en Java

Exemples d'obtention de la taille d'un fichier en Java.

Read more

2. Avec JDK 6

Commençons par la solution Java JDK6 simple:

@Test
public void givenUsingJDK6_whenMovingFile_thenCorrect() throws IOException {
    File fileToMove = new File("src/test/resources/toMoveFile_jdk6.txt");
    boolean isMoved = fileToMove.renameTo(new File("src/test/resources/movedFile_jdk6.txt"));
    if (!isMoved) {
        throw new FileSystemException("src/test/resources/movedFile_jdk6.txt");
    }
}

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

Notez querenameTo() 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, etNullPointerException - dans le cas où le paramètre target est nul . Si la cible n'existe pas dans un système de fichiers -no exception will be thrown - et vous devrez vérifier l'indicateur de réussite renvoyé de la méthode.

3. Avec JDK 7

Voyons maintenant comment nous pouvons faire de même avec NIO et JDK 7:

@Test
public void givenUsingJDK7Nio2_whenMovingFile_thenCorrect() throws IOException {
    Path fileToMovePath =
      Files.createFile(Paths.get("src/test/resources/" + randomAlphabetic(5) + ".txt"));
    Path targetPath = Paths.get("src/main/resources/");

    Files.move(fileToMovePath, targetPath.resolve(fileToMovePath.getFileName()));
}

Dans JDK7, le package NIO a été considérablement mis à jour et lesPath ajoutés - cela fournit des méthodes pour une manipulation pratique des artefacts du système de fichiers.

Notez que, comme dans l'exemple précédent, le fichier et le répertoire cible doivent exister.

4. Avec goyave

Ensuite, jetons un coup d'œil à la solution Guava:

@Test
public void givenUsingGuava_whenMovingFile_thenCorrect()
  throws IOException {
    File fileToMove = new File("src/test/resources/fileToMove.txt");
    File destDir = new File("src/test/resources/");
    File targetFile = new File(destDir, fileToMove.getName());

    com.google.common.io.Files.move(fileToMove, targetFile);
}

De nouveau, dans cet exemple, le fichier à déplacer et le répertoire cible doivent exister.

5. Avec Commons IO

Enfin, examinons une solution avec Apache Commons IO - probablement la plus simple:

@Test
public void givenUsingApache_whenMovingFile_thenCorrect() throws IOException {
    FileUtils.moveFile(
      FileUtils.getFile("src/test/resources/fileToMove.txt"),
      FileUtils.getFile("src/test/resources/fileMoved.txt"));
}

Bien entendu, cette ligne permettra à la fois le déplacement et le changement de nom - selon que le répertoire cible est identique 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

We looked at renaming in these code snippets, mais le déplacement est, bien sûr, le même, seul le répertoire cible doit être différent.

Et voilà - 5 solutions rapides pour déplacer un fichier en Java.