Contents

Java 删除文件

1. 使用 JDK 6

让我们从标准的 Java 6 解决方案开始:

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

正如你所看到的——**在删除操作之前该文件必须存在;**如果不存在,API 不会抛出任何异常,而是返回 false。

2. 使用 JDK 7

让我们继续讨论 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);
}

现在——这将更好地利用异常。如果触发删除操作时文件不存在 – API 将抛出NoSuchFileException

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

3. 使用 Commons IO

Commons IO 允许我们控制删除文件时的异常行为。对于吞掉任何可能的异常的安静删除:

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

请注意,我们仍然可以通过简单地检查删除方法的返回值来确定操作是否成功。

现在——如果我们确实希望抛出异常:

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

如果文件系统上不存在要删除的文件,API 将抛出标准FileNotFoundException

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

现在您已经掌握了在 Java 中删除文件的 4 种简单方法。