java 删除文件失败_如何判断文件删除在Java中失败的原因?

在Java 6中,不幸的是没有办法确定为什么文件不能被删除。 对于Java 7,您可以使用java.nio.file.Path#delete()来代替,如果无法删除文件或目录,将会给出详细的失败原因。

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

嗯,我可以做的最好的:

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."; } }

请注意,它可以是您自己的应用程序,防止文件被删除!

如果您以前写入文件并且没有closures写入器,则您正在locking文件。

Java 7 java.nio.file.Files类也可以使用:

try { Files.delete(path); } catch (NoSuchFileException x) { System.err.format("%s: no such" + " file or directory%n", path); } catch (DirectoryNotEmptyException x) { System.err.format("%s not empty%n", path); } catch (IOException x) { // File permission problems are caught here. System.err.println(x); }

删除可能由于一个或多个原因而失败:

文件不存在(使用File#exists()来testing)。

文件被locking(因为它被另一个应用程序(或您自己的代码!)打开)。

你没有授权(但是会引发一个SecurityException,而不是返回false!)。

所以,每当删除失败,做一个File#exists()检查是否是由1)或2)引起的。

总结如下:

if (!file.delete()) { String message = file.exists() ? "is in use by another app" : "does not exist"; throw new IOException("Cannot delete file, because file " + message + "."); }

正如在File.delete()中指出的那样

你可以使用一个SecurityManager来为你引发怀疑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值