无法在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信息,后跟描述与相关文件有关的任何标志的字符串。您关心的标志是uchg
和schg
(分别表示用户不可变性标志和系统不可变性标志)。
您可以按如下方式删除这些标志:
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,查看角落的小复选框),那么其中至少有一项应该可以解决您的问题。
相关文章