1

有什么方法可以在java中创建一个不能删除的文件。我用谷歌搜索了它并找到了涉及 cmd 的进程。但是,我需要一种可以在任何平台上完成的纯“java”方式。

提前致谢。

4

3 回答 3

2

谢谢您的帮助。我终于做对了。我使用以下代码拒绝用户访问

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()));
}
于 2013-03-20T15:16:45.593 回答
0

如果您想创建一个不会被意外覆盖的文件,请查看对此的各种答案:如何以编程方式更改文件权限?

如果您想创建一个当前程序根本无法删除的文件(但特权程序可以),则可以通过在父目录上适当地设置权限,或者可能使用 SELinux 强制访问控制技巧。

如果您想创建一个真正不可删除的文件,那么您就不走运了。我不知道有任何操作系统支持创建永远无法删除的文件。这将是一个“反特征”。


我也同意@Teifi 的评论。在用户的机器上创建一个永远无法删除的文件是不可接受的……除非由系统管理员完成,或者得到系统管理员的授权。我也会称任何这样做的软件都是“恶意的”。

于 2013-03-20T13:47:17.020 回答
0

尝试方法 setPosixFilePermissions() 并将所有用户类的权限设置为只读。参考这个 - http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#setPosixFilePermissions%28java.nio.file.Path,%20java.util.Set%29

于 2013-03-20T13:39:10.563 回答