Java - Umbenennen oder Verschieben einer Datei

1. Übersicht

In diesem kurzen Tutorial werden wir uns mit dem Umbenennen / Verschieben einer Datei in Java befassen.

Wir werden zunächst die Klassen " Dateien" und " Pfad" von NIO, dann die Klasse " Java- Datei" , "Google Guava" und schließlich die Apache Commons-E / A-Bibliothek verwenden.

Dieser Artikel ist Teil der Reihe „ Java - Back to Basic “ hier auf Baeldung.

2. Setup

In den Beispielen verwenden wir das folgende Setup, das aus 2 Konstanten für den Namen der Quell- und Zieldatei und einem Bereinigungsschritt besteht, um die Tests mehrmals ausführen zu können:

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. Mit den NIO - Pfaden und Dateien Klassen

Beginnen wir mit der Files.move () -Methode aus dem Java NIO-Paket:

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

In JDK7 wurde das NIO-Paket erheblich aktualisiert und die Path- Klasse hinzugefügt. Dies bietet Methoden zur bequemen Bearbeitung von Dateisystemartefakten.

Beachten Sie, dass sowohl die Datei als auch das Zielverzeichnis vorhanden sein sollten.

4. Mit der Datei - Klasse

Schauen wir uns nun an, wie wir dasselbe mit der File.renameTo () -Methode tun können :

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

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

Beachten Sie, dass renameTo () nur zwei Arten von Ausnahmen auslöst :

  • SecurityException - Wenn ein Sicherheitsmanager den Schreibzugriff auf die Quelle oder das Ziel verweigert
  • NullPointerException - falls das Parameterziel null ist

Wenn das Ziel in einem Dateisystem nicht vorhanden ist - es wird keine Ausnahme ausgelöst - und Sie müssen das zurückgegebene Erfolgsflag der Methode überprüfen.

5. Verwenden von Guave

Als nächstes werfen wir einen Blick auf die Guava-Lösung, die eine praktische Files.move () -Methode bietet :

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

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

6. 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(FILE_TO_MOVE), FileUtils.getFile(TARGET_FILE)); }

Diese eine Zeile ermöglicht natürlich sowohl das Verschieben als auch das Umbenennen, je nachdem, 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

In diesem Artikel haben wir uns verschiedene Lösungen zum Verschieben einer Datei in Java angesehen. Wir haben uns darauf konzentriert, diese Codefragmente umzubenennen, aber das Verschieben ist natürlich dasselbe, nur das Zielverzeichnis muss unterschiedlich sein.

Der Code für die Beispiele ist auf GitHub verfügbar.