1. Überblick

Java - Umbenennen oder Verschieben einer Datei

1. Überblick

In diesem kurzen Tutorial werden wir unsrenaming / moving a File in Java ansehen - zuerst mit JDK 6, dann mit JDK 7 mit NIO, Google Guava und schließlich mit der Apache Commons IO-Bibliothek.

Dieser Artikel ist Teil vonthe “Java – Back to Basic” series hier am Beispiel.

Weitere Lektüre:

So kopieren Sie eine Datei mit Java

Sehen Sie sich einige gebräuchliche Methoden zum Kopieren von Dateien in Java an.

Read more

Einführung in die Java NIO2 File API

Eine schnelle und praktische Anleitung zur Java NIO2 File API

Read more

Dateigröße in Java

Beispiele für das Abrufen der Größe einer Datei in Java.

Read more

2. Mit JDK 6

Beginnen wir mit der einfachen Java, JDK6-Lösung:

@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");
    }
}

In diesem Beispiel ist die zu verschiebende Datei sowie das Zielverzeichnis vorhanden.

Beachten Sie, dassrenameTo() nur zwei Arten von Ausnahmen auslöst -SecurityException - wenn ein Sicherheitsmanager den Schreibzugriff entweder auf die Quelle oder auf das Ziel verweigert, undNullPointerException - falls das Parameterziel null ist . Wenn das Ziel in einem Dateisystem nicht vorhanden ist -no exception will be thrown - und Sie das zurückgegebene Erfolgsflag der Methode überprüfen müssen.

3. Mit JDK 7

Schauen wir uns nun an, wie wir mit NIO und JDK 7 dasselbe tun können:

@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()));
}

In JDK7 wurde das NIO-Paket erheblich aktualisiert undPathhinzugefügt - dies bietet Methoden zur bequemen Bearbeitung von Dateisystemartefakten.

Beachten Sie, dass ähnlich wie im vorherigen Beispiel sowohl die Datei als auch das Zielverzeichnis vorhanden sein sollten.

4. Mit Guave

Weiter - werfen wir einen Blick auf die Guava-Lösung:

@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);
}

Auch in diesem Beispiel müssen die zu verschiebende Datei und das Zielverzeichnis vorhanden sein.

5. Mit Commons IO

Schauen wir uns zum Schluss eine Lösung mit Apache Commons IO an - wahrscheinlich die einfachste:

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

Diese eine Zeile erlaubt natürlich das Verschieben oder Umbenennen - abhängig davon, ob das Zielverzeichnis dasselbe ist oder nicht.

Alternativ - hier ist eine Lösung für das spezifische Verschieben, mit der wir das Zielverzeichnis automatisch erstellen können, falls es noch nicht vorhanden ist:

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

6. Fazit

We looked at renaming in these code snippets, aber das Verschieben ist natürlich das gleiche, nur das Zielverzeichnis muss unterschiedlich sein.

Und da haben Sie es - 5 schnelle Lösungen zum Verschieben einer Datei in Java.