有什么方法可以在java中创建一个不能删除的文件。我用谷歌搜索了它并找到了涉及 cmd 的进程。但是,我需要一种可以在任何平台上完成的纯“java”方式。
提前致谢。
谢谢您的帮助。我终于做对了。我使用以下代码拒绝用户访问
public static void main() throws IOException
{
Path file = Paths.get("c:/b.txt");
AclFileAttributeView aclAttr = Files.getFileAttributeView(file, AclFileAttributeView.class);
//System.out.println();
UserPrincipalLookupService upls = file.getFileSystem().getUserPrincipalLookupService();
UserPrincipal user = upls.lookupPrincipalByName(System.getProperty("user.name"));
AclEntry.Builder builder = AclEntry.newBuilder();
builder.setPermissions(EnumSet.of(AclEntryPermission.APPEND_DATA, AclEntryPermission.DELETE, AclEntryPermission.DELETE_CHILD, AclEntryPermission.EXECUTE, AclEntryPermission.READ_ACL, AclEntryPermission.READ_ATTRIBUTES, AclEntryPermission.READ_DATA, AclEntryPermission.READ_NAMED_ATTRS, AclEntryPermission.SYNCHRONIZE, AclEntryPermission.WRITE_ACL, AclEntryPermission.WRITE_ATTRIBUTES, AclEntryPermission.WRITE_DATA, AclEntryPermission.WRITE_NAMED_ATTRS, AclEntryPermission.WRITE_OWNER));
builder.setPrincipal(user);
builder.setType(AclEntryType.DENY);
aclAttr.setAcl(Collections.singletonList(builder.build()));
}
如果您想创建一个不会被意外覆盖的文件,请查看对此的各种答案:如何以编程方式更改文件权限?
如果您想创建一个当前程序根本无法删除的文件(但特权程序可以),则可以通过在父目录上适当地设置权限,或者可能使用 SELinux 强制访问控制技巧。
如果您想创建一个真正不可删除的文件,那么您就不走运了。我不知道有任何操作系统支持创建永远无法删除的文件。这将是一个“反特征”。
我也同意@Teifi 的评论。在用户的机器上创建一个永远无法删除的文件是不可接受的……除非由系统管理员完成,或者得到系统管理员的授权。我也会称任何这样做的软件都是“恶意的”。
尝试方法 setPosixFilePermissions() 并将所有用户类的权限设置为只读。参考这个 - http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#setPosixFilePermissions%28java.nio.file.Path,%20java.util.Set%29