储物范围应用程序是一个文件夹锁定应用程序,如何使用Java在Windows上锁定文件或文件夹?
这是我尝试的:
File file = new File(file path);
file.setExecutable(false);
file.setWritable(false);
file.setReadable(false);
但是只有file.setwritable(false);
起作用 - 我无法重写文件。其他方法对文件没有任何作用。
这些方法只是设置文件的文件系统访问权限。为了理解它们,您需要了解OS/文件系统访问控制规则。
例如,Linux file.setWriteable(false)
等于运行chmod u-w file
,以清除"所有者写"访问位:
注意:
-
chmod
如果您是文件的所有者,或者如果您以root
的运行,则只能更改文件上的任何权限。 -
所有者写入权限意味着所有者(或
root
(可以执行文件。如果您都不是,那么权限不会影响您。
因此,至少有两个可能的原因是setWriteable
可能无法"工作"。
-
您没有作为文件所有者或
root
执行Java程序。在这种情况下,setWriteable
将返回false
。但是请注意,您不检查结果! -
您没有试图将文件写为文件的所有者。在这种情况下,访问但您刚刚删除(在Java(不影响您。
解决方案:
有一个较新/更好的API用于在java.nio.file.Files
类中的Java中设置文件权限:
public static Path setPosixFilePermissions(
Path path,
Set<PosixFilePermission> perms)
throws IOException
这允许您在一个呼叫中设置/清除所有可用的POSIX文件权限,并且如果不能出于任何原因,则可以进行例外。
许多文件系统也支持更复杂的ACL机制....
但是
这些都不等同于文件储物应用程序提供的功能。为什么?因为任何试图通过文件权限或ACL阻止文件访问的任何尝试都可以由具有root访问权限的人毫无用处地逆转。只要您知道它在技术层面上在做什么。
Windows"文件夹锁定"应用程序显然可以加密文件或隐藏什么。可以通过设置" dos:hidend"属性在Java 7中标记为隐藏的文件;请参阅https://stackoverflow.com/a/42816082/139985。它也可能使用权限和ACL来限制访问,这也可以在Java上进行。它也可能正在做其他事情。文档说(无需无聊!(:
文件锁定后,它将以各种可能的方式受到保护,并且只能通过文件夹锁定安全应用程序访问。
听起来像是营销而不是真理,几乎肯定是不真实的。但是,弄清楚该应用程序实际上在做什么,需要我获取Windows机器,下载并安装软件,然后尝试通过反向工程来违反许可证。
,请注意,上述"隐藏"的方法是特定于Windows的。在Linux/Mac OS上,您通过使文件名的第一个字符为dot("。"(字符"隐藏"某些命令中的文件。