Java - Renomear ou mover um arquivo
1. Visão geral
Neste tutorial rápido, vamos dar uma olhada emrenaming / moving a File in Java - primeiro usando JDK 6, depois JDK 7 com NIO, Google Guava e finalmente a biblioteca Apache Commons IO.
Este artigo faz parte dethe “Java – Back to Basic” series aqui no exemplo.
Leitura adicional:
Como copiar um arquivo com Java
Veja algumas maneiras comuns de copiar arquivos em Java.
Introdução à API de arquivos Java NIO2
Um guia rápido e prático para a API de arquivos Java NIO2
2. Com JDK 6
Vamos começar com o Java simples, solução JDK6:
@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");
}
}
Neste exemplo - o arquivo a ser movido existe, assim como o diretório de destino.
Observe querenameTo() só lança dois tipos de exceções -SecurityException - se um gerente de segurança negar acesso de gravação para a origem ou para o destino, eNullPointerException - no caso de o parâmetro de destino ser nulo . Se o destino não existir em um sistema de arquivos -no exception will be thrown - e você terá que verificar o sinalizador de sucesso retornado do método.
3. Com JDK 7
Vejamos agora como podemos fazer o mesmo usando NIO e 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()));
}
No JDK7, o pacote NIO foi significativamente atualizado e oPath adicionado - fornece métodos para manipulação conveniente de artefatos do sistema de arquivos.
Observe que, da mesma forma que no exemplo anterior - o arquivo e o diretório de destino devem existir.
4. Com goiaba
A seguir - vamos dar uma olhada na solução 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);
}
Novamente, neste exemplo, o arquivo a ser movido e o diretório de destino precisam existir.
5. Com Commons IO
Finalmente, vamos dar uma olhada em uma solução com Apache Commons IO - provavelmente a mais simples:
@Test
public void givenUsingApache_whenMovingFile_thenCorrect() throws IOException {
FileUtils.moveFile(
FileUtils.getFile("src/test/resources/fileToMove.txt"),
FileUtils.getFile("src/test/resources/fileMoved.txt"));
}
Essa linha permitirá, obviamente, mover ou renomear - dependendo se o diretório de destino for o mesmo ou não.
Alternativamente - aqui está uma solução para mover especificamente, também nos permitindo criar automaticamente o diretório de destino se ele ainda não existir:
@Test
public void givenUsingApache_whenMovingFileApproach2_thenCorrect() throws IOException {
FileUtils.moveFileToDirectory(
FileUtils.getFile("src/test/resources/fileToMove.txt"),
FileUtils.getFile("src/main/resources/"), true);
}
6. Conclusão
We looked at renaming in these code snippets, mas mover é, obviamente, o mesmo, apenas o diretório de destino precisa ser diferente.
E aí está - 5 soluções rápidas para mover um arquivo em Java.