如何判断为什么Java中的文件删除失败?

2022-09-01 02:29:36
File file = new File(path);
if (!file.delete())
{
    throw new IOException(
        "Failed to delete the file because: " +
        getReasonForFileDeletionFailureInPlainEnglish(file));
}

有没有一个很好的实现已经在那里?否则我就只能自己写。getReasonForFileDeletionFailureInPlainEnglish(file)


答案 1

不幸的是,在Java 6中,没有办法确定为什么不能删除文件。在 Java 7 中,您可以改用 Java 7,如果无法删除文件或目录,这将为您提供失败的详细原因。java.nio.file.Files#delete()

请注意,file.list() 可能会返回目录的条目,这些条目可以删除。用于删除的API文档说,只能删除空目录,但如果包含的文件是例如操作系统特定的元数据文件,则目录被视为空目录。


答案 2

嗯,我能做的最好的:

public String getReasonForFileDeletionFailureInPlainEnglish(File file) {
    try {
        if (!file.exists())
            return "It doesn't exist in the first place.";
        else if (file.isDirectory() && file.list().length > 0)
            return "It's a directory and it's not empty.";
        else
            return "Somebody else has it open, we don't have write permissions, or somebody stole my disk.";
    } catch (SecurityException e) {
        return "We're sandboxed and don't have filesystem access.";
    }
}