【问题标题】:Why didn't File#delete throw exception when the file was not deleted?为什么 File#delete 在文件没有被删除时没有抛出异常?
【发布时间】:2014-07-30 23:04:21
【问题描述】:

以下代码抛出断言,但不是异常。

if( descFile.exists() ) {
    check = descFile.delete();
    assert(check);
}

怎么可能?如果文件没有被删除,为什么不抛出异常?

【问题讨论】:

  • 有几个可能的原因:你没有足够的权限,文件已经被其他进程删除,文件正在被其他进程使用(锁定)...
  • 如果文件被锁定,为什么不会出现异常?
  • 因为File#delete 只会抛出异常如果安全管理器存在并且其SecurityManager.checkDelete(java.lang.String) 方法拒绝删除对文件的访问权限

标签: java exception file-io


【解决方案1】:

根据javadocsFile.delete()只会抛出:

SecurityException - 如果存在安全管理器并且它的 SecurityManager.checkDelete(java.lang.String) 方法拒绝删除 访问文件

因此,如果您没有激活安全管理器,则不会出现异常,只会出现常规返回行为,即:

当且仅当文件或目录被成功删除时为真; 否则为假

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-12
    • 2021-07-08
    • 2020-11-04
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    相关资源
    最近更新 更多