【问题标题】:Check permissions of a non-existent file in java检查java中不存在文件的权限
【发布时间】:2012-02-01 21:34:42
【问题描述】:

我想做这样的事情:

if (!file.canWrite())
  throw Exception("Permission denied");
file.mkdirs();

但是,我不能这样做,因为canWrite 仅适用于已经存在的文件。有没有办法判断我是否能够写入文件(如果存在)?


编辑:谢谢,我意识到我可以检查文件是否存在。读过第三行代码的人都会意识到,我的问题是mkdirs 如果无法创建目录,它只会返回false - 没有解释创建失败的原因。

另外,mkdirs 将创建任意深度嵌套的文件。所以我需要类似的东西:

while(file.hasParent()){
  file = file.parent();
  if (!file.canWrite()) throw (..);
}

正如 Paul 指出的,我也需要知道 umask。

【问题讨论】:

  • Is there a way to tell if I would be able to write to a file, if it existed? 我不这么认为...
  • 考虑检查目录的权限。
  • 查看目录;这就是定义写权限的原因,不是吗?否则不是真的,因为可以使用自己的权限创建文件。
  • 除了目录的权限外,还需要知道umask。我认为没有一种简单的方法可以做到这一点。
  • @BrianRoach:在说我很荒谬之前,请先看看mkdirs does 是什么...

标签: java file permissions


【解决方案1】:

做同样的事情,但是在目录上。目录写入权限决定谁可以和不可以将文件写入该目录。

【讨论】:

  • 如果它的直接父目录也不存在怎么办? mkdirs 允许任意嵌套不存在的目录。
  • 但是您可以拥有不同于目录权限的文件权限。
  • @Brian - 要做到这一点,文件必须存在,这不是他所要求的......尽管它现在开始接近荒谬。
  • @Xodarap - mkdir 不是魔法,而是代码。分解/first/second/third 之类的代码并检查每个内容以查看它是否存在,在权限允许时创建它需要的内容。
【解决方案2】:

可以先检查文件是否存在:

boolean exists = file.exists();

【讨论】:

    【解决方案3】:

    您无法测试不存在的东西的权限。但是,您可以进行测试以查看该项目是否存在,如果存在则检查权限。

    【讨论】:

      猜你喜欢
      • 2014-11-04
      • 1970-01-01
      • 2015-02-10
      • 2010-09-06
      • 1970-01-01
      • 2014-09-10
      • 1970-01-01
      • 2020-06-27
      相关资源
      最近更新 更多