无法通过java代码更改文件夹的权限
我创建了一个临时文件夹,然后尝试在Windows 7计算机中更改其权限。我有管理员权限无法通过java代码更改文件夹的权限,java,file,hive,file-permissions,Java,File,Hive,File Permissions,我创建了一个临时文件夹,然后尝试在Windows 7计算机中更改其权限。我有管理员权限 public class FilePermissionExample { public static void main( String[] args ) { try { File file = File.createTempFile("temp", Long.toString(System.nanoTime())); fil
public class FilePermissionExample
{
public static void main( String[] args )
{
try {
File file = File.createTempFile("temp", Long.toString(System.nanoTime()));
file.delete();
file.mkdir();
if(file.exists()){
System.out.println("Is Execute allow : " + file.canExecute());
System.out.println("Is Write allow : " + file.canWrite());
System.out.println("Is Read allow : " + file.canRead());
}
file.setExecutable(false);
file.setReadable(false);
file.setWritable(false);
System.out.println("Is Execute allow : " + file.canExecute());
System.out.println("Is Write allow : " + file.canWrite());
System.out.println("Is Read allow : " + file.canRead());
if (file.createNewFile()){
System.out.println("File is created!");
}else{
System.out.println("File already exists.");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
输出:是否允许执行:true
是否允许写入:true
是否允许读取:true
是否允许执行:true
是否允许写入:true
是否允许读取:true
文件已存在。
期望值:
是否允许执行:true
是否允许写入:true
是否允许读取:true
是否允许执行:false
是否允许写入:false
是否允许读取:false
在windows中使用HiverRunner编写配置单元测试时,我遇到了类似的问题。有人能提出一些建议吗?来自
java.io.File
的API文档:
文件系统可能对实际文件系统对象上的某些操作实施限制,例如读取、写入和执行。这些限制统称为访问权限。文件系统可能对单个对象具有多组访问权限。例如,一个集合可以应用于对象的所有者,另一个集合可以应用于所有其他用户。对象的访问权限可能会导致此类中的某些方法失败。“
因此,您的操作系统不允许更改权限。如果要更改NTFS格式驱动器上的权限,您需要通过更改权限 下面是一个相当详细的代码片段,它显示了在给定文件上删除
授权用户的写入
权限的主体
假设用户jane
是文件fobar.bin
的所有者,并且用户john
具有as授权用户对其的写入权限。运行代码段后,john
无法再写入文件
static final String AUTHENTICATED_USERS = "NT AUTHORITY\\Authenticated Users";
...
Path file = Paths.get("foobar.bin");
AclFileAttributeView view = Files.getFileAttributeView(
file, AclFileAttributeView.class);
// show current permissions for authenticated users
for (AclEntry acl : view.getAcl()) {
if (acl.principal().getName().equals(AUTHENTICATED_USERS)) {
System.out.printf("current permissions: %s%n", acl.permissions());
}
}
// remove the WRITE_DATA permission for authenticated users
// get list of current ACLs
List<AclEntry> acls = view.getAcl();
for (int i = 0; i < acls.size(); i++) {
UserPrincipal principal = acls.get(i).principal();
String principalName = principal.getName();
if (principalName.equals(AUTHENTICATED_USERS)) {
// get the current permissions
Set<AclEntryPermission> permissions = acls.get(i).permissions();
// remove WRITE_DATA permission
permissions.remove(AclEntryPermission.WRITE_DATA);
// create a new ACL entry
AclEntry entry = AclEntry.newBuilder()
.setType(AclEntryType.ALLOW)
.setPrincipal(principal)
.setPermissions(permissions)
.build();
// replace the ACL entry for authenticated users
acls.set(i, entry);
}
}
// set the updated list of ACLs
view.setAcl(acls);
// show updated permissions for authenticated users
for (AclEntry acl : view.getAcl()) {
if (acl.principal().getName().equals(AUTHENTICATED_USERS)) {
System.out.printf("updated permissions: %s%n", acl.permissions());
}
}
权限WRITE\u DATA
已被删除。什么返回方法setExecutable、setReadable和setWritable?如果使用setExecutable删除字符串会发生什么情况?它们都返回布尔值。所有设置程序都返回“false”。我不理解你的第二个问题。这些方法将布尔值作为参数而不是字符串。我有不使用字符串如果操作系统不支持该操作,这些操作可能会失败。我不知道windows是否支持可执行文件,所以我建议它不支持,并且setExecutable方法会使所有三个操作失败。即使我删除了sertExecutable()调用,它不起作用。我注意到,当您使用此选项编辑权限时,文件资源管理器显示未设置权限。
current permissions: [READ_NAMED_ATTRS, DELETE, EXECUTE, WRITE_ACL, \
WRITE_ATTRIBUTES, DELETE_CHILD, WRITE_DATA, READ_ATTRIBUTES, \
SYNCHRONIZE, WRITE_OWNER, APPEND_DATA, WRITE_NAMED_ATTRS, READ_DATA, \
READ_ACL]
updated permissions: [READ_NAMED_ATTRS, DELETE, EXECUTE, WRITE_ACL, \
WRITE_ATTRIBUTES, DELETE_CHILD, READ_ATTRIBUTES, SYNCHRONIZE, \
WRITE_OWNER, APPEND_DATA, WRITE_NAMED_ATTRS, READ_DATA, READ_ACL]