Java: cambiar el nombre o mover un archivo

1. Información general

En este tutorial rápido, veremos cómo cambiar el nombre / mover un archivo en Java.

Primero veremos el uso de las clases Archivos y Ruta de NIO, luego la clase Java File , Google Guava y finalmente la biblioteca Apache Commons IO.

Este artículo es parte de la serie " Java - Back to Basic " aquí en Baeldung.

2. Configuración

En los ejemplos, usaremos la siguiente configuración, que consta de 2 constantes para el nombre del archivo de origen y destino y un paso de limpieza para poder ejecutar las pruebas varias veces:

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. Uso de las clases de archivos y rutas de NIO

Comencemos usando el método Files.move () del paquete 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); }

En JDK7, el paquete NIO se actualizó significativamente y se agregó la clase Path . Esto proporciona métodos para una manipulación conveniente de los artefactos del sistema de archivos.

Tenga en cuenta que tanto el archivo como el directorio de destino deben existir.

4. Uso de la clase de archivo

Veamos ahora cómo podemos hacer lo mismo usando el método 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); } }

En este ejemplo, el archivo que se va a mover existe, así como el directorio de destino.

Tenga en cuenta que renameTo () solo arroja dos tipos de excepciones:

  • SecurityException : si un administrador de seguridad niega el acceso de escritura al origen o al destino
  • NullPointerException - en caso de que el objetivo del parámetro sea nulo

Si el objetivo no existe en un sistema de archivos, no se lanzará ninguna excepción, y tendrá que verificar el indicador de éxito devuelto del método.

5. Usar guayaba

A continuación, echemos un vistazo a la solución Guava, que proporciona un método conveniente Files.move () :

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

Nuevamente, en este ejemplo, el archivo que se va a mover y el directorio de destino deben existir.

6. Con Commons IO

Finalmente, echemos un vistazo a una solución con Apache Commons IO, probablemente la más simple:

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

Esta línea permitirá, por supuesto, mover o cambiar el nombre, dependiendo de si el directorio de destino es el mismo o no.

Alternativamente, aquí hay una solución para moverse específicamente, que también nos permite crear automáticamente el directorio de destino si aún no existe:

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

6. Conclusión

En este artículo, analizamos diferentes soluciones para mover un archivo en Java. Nos enfocamos en cambiar el nombre en estos fragmentos de código, pero mover es, por supuesto, lo mismo, solo que el directorio de destino debe ser diferente.

El código de los ejemplos está disponible en GitHub.