无法在MacOS上打开文件-FileNotFoundException,不允许操作

这是一个简单的程序:

new FileInputStream("/Users/me/Desktop/foo.png")

我正尝试从IntelliJ运行它,但收到:

线程异常(不允许操作)

Unix烫发是常见的rw-r--r--。这与MacOS的额外安全性有关。

现在如何在MacOS上打开Java程序中的文件?

这是MacOS 11.0测试版(大苏尔)。也许它也发生在11.0之前;我不知道。


解决方案

您遇到了MacOS特定的问题。在MacOS中,检查经典的POSIX权限是不够的,因为该操作系统引入了许多机制来提供细粒度控制和安全性。

访问控制列表

POSIX权限提供了三个可以控制访问权限的分组:所有者、组和其他所有人。另一方面,ACL允许创建访问控制实体,该实体可以以多种方式定义。这不是一个*NIX入门读物,所以让我们来看看最重要的部分。要检查ACL,请启动终端会话,导航到包含目标文件的目录,然后键入:

ls -le foo.png
您应该会看到POSIX权限,后跟一个编号的ACL规则列表。如果您的帐户受到这些规则之一的影响,您可以按如下方式删除该规则:

sudo chmod -a# num foo.png

其中num是违规规则的数字标识符。

文件标志

文件标志是另一种并行权限系统。再次使用终端,请尝试:

ls -lO foo.png

注意:该标志是小写字母L后跟大写字母O。不能将其中之一与数字1或0混淆。

您将再次看到POSIX信息,后跟描述与相关文件有关的任何标志的字符串。您关心的标志是uchgschg(分别表示用户不可变性标志和系统不可变性标志)。

您可以按如下方式删除这些标志:

sudo chflags nouchg foo.png
sudo chflags noschg foo.png

扩展属性

检查文件的扩展属性,如下所示:

xattr -l $foo.png

按如下方式删除所有扩展属性:

sudo xattr -c $foo.png

系统完整性保护

系统完整性保护可能已将您的文件指定为无根文件。使用以下命令在终端检查状态:

ls -l@ foo.png
清除无根标志会更痛苦一些。通过恢复盘启动,打开终端,导航到您的文件并输入:

sudo xattr -d com.apple.rootless foo.png

我不是系统管理员,但假设您已经验证了您的帐户具有POSIX权限,并且文件不是简单地通过Finder锁定的(Command-i,查看角落的小复选框),那么其中至少有一项应该可以解决您的问题。

相关文章