Java - Excluir um arquivo

Java - Excluir um arquivo

Este artigo rápido ilustra como excluir um arquivo em Java - primeiro usando JDK 6, depois JDK 7 e finalmente a bibliotecaApache Commons IO.

Este artigo faz parte dethe “Java – Back to Basic” series aqui no exemplo.

1. Com Java - JDK 6

Vamos começar com a solução Java 6 padrão:

@Test
public void givenUsingJDK6_whenDeletingAFile_thenCorrect() throws IOException {
    new File("src/test/resources/fileToDelete_jdk6.txt").createNewFile();

    File fileToDelete = new File("src/test/resources/fileToDelete_jdk6.txt");
    boolean success = fileToDelete.delete();

    assertTrue(success);
}

Como você pode ver -the file must exist before the delete operation; caso contrário, a API não lançará nenhuma exceção, mas retornará falso.

2. Com Java - JDK 7

Vamos passar para a solução JDK 7:

@Test
public void givenUsingJDK7nio2_whenDeletingAFile_thenCorrect() throws IOException {
    Files.createFile(Paths.get("src/test/resources/fileToDelete_jdk7.txt"));

    Path fileToDeletePath = Paths.get("src/test/resources/fileToDelete_jdk7.txt");
    Files.delete(fileToDeletePath);
}

Agora - isso fará um melhor uso das exceções. Se o arquivo não existir quando a operação de exclusão for acionada - umNoSuchFileException será lançado pela API:

java.nio.file.NoSuchFileException: srctestresourcesfileToDelete_jdk7.txt
    at s.n.f.WindowsException.translateToIOException(WindowsException.java:79)

3. Com Commons IO

O Commons IO nos permite controlar o comportamento das exceções ao excluir um arquivo. Para uma exclusão silenciosa que absorve todas as possíveis exceções:

@Test
public void givenUsingCommonsIo_whenDeletingAFileV1_thenCorrect() throws IOException {
    FileUtils.touch(new File("src/test/resources/fileToDelete_commonsIo.txt"));
    File fileToDelete = FileUtils.getFile("src/test/resources/fileToDelete_commonsIo.txt");
    boolean success = FileUtils.deleteQuietly(fileToDelete);

    assertTrue(success);
}

Observe que ainda podemos determinar se a operação foi bem-sucedida ou não, simplesmente verificando o valor de retorno do método delete.

Agora - se queremos que uma exceção seja lançada:

@Test
public void givenUsingCommonsIo_whenDeletingAFileV2_thenCorrect() throws IOException {
    FileUtils.touch(new File("src/test/resources/fileToDelete.txt"));

    FileUtils.forceDelete(FileUtils.getFile("src/test/resources/fileToDelete.txt"));
}

Se o arquivo a ser excluído não existir no sistema de arquivos, a API lançará umFileNotFoundException padrão:

java.io.FileNotFoundException: File does not exist: srctestresourcesfileToDelete.txt
    at org.apache.commons.io.FileUtils.forceDelete(FileUtils.java:2275)

E aí está - 4 maneiras simples de excluir um arquivo em Java.