我正在 Windows 中创建一个文件,并希望限制用户删除、重命名和修改所创建的文件。我使用下面的代码创建文件并授予只读权限。但是,用户可以修改创建的文件。
非常感谢。
public class checkFilePermission {
private static String path = "C:\\Users\\abc_user\\Desktop\\VI\\test123.txt";
public static void main(String[] args) {
checkPermissions(path);
}
public static void checkPermissions(String path){
File file = new File(path);
System.out.println(file.getPath());
if(file.canExecute()){
System.out.println("Executable file");
}
if(file.canRead()){
System.out.println("Readable file");
}
if(file.canWrite()){
System.out.println("Writeable file");
}
//We can set the permissions as well.
file.setExecutable(false);
file.setReadable(false);
file.setWritable(false);
//file.setReadOnly();
System.out.println("Exe = "+file.canExecute());
System.out.println("Read = "+file.canRead());
System.out.println("Wrt = "+file.canWrite());
}
}
最佳答案
我尝试了以下方法来限制用户删除、重命名和修改文件。请尝试同样的方法并使其发挥作用。提供权限后,我们必须撤销用户的权限
public static void Permissions(String path) throws IOException{
File file1 = new File(path);
System.out.println(file1.getPath());
if (file1.createNewFile()){
System.out.println("File is created!");
}else{
System.out.println("File already exists.");
}
//1. Using CACLS cmd
// Runtime.getRuntime().exec("CACLS myfile.txt /E /G hitesh_golhani:R" + path);
//2. Using file methods
// boolean a = file.setExecutable(true,true);
// boolean b = file.setReadable(true,true);
// boolean c = file.setWritable(true,true);
// file.setReadOnly();
//3. Using FilePermission
// SecurityManager sm = new SecurityManager();
// FilePermission fp1 = new FilePermission(path, "read");
// PermissionCollection pc = fp1.newPermissionCollection();
// pc.add(fp1);
//4. Using POSIX java 7
// Set perms = new HashSet();
// perms.add(PosixFilePermission.OWNER_READ);
// perms.add(PosixFilePermission.OWNER_WRITE);
// Files.setPosixFilePermissions(file.toPath(), perms);
/* //5. Using Path
Path file = Paths.get(path);
AclFileAttributeView aclAttr = Files.getFileAttributeView(file, AclFileAttributeView.class);
System.out.println("owner------"+aclAttr.getOwner());
for(AclEntry aclEntry : aclAttr.getAcl()){
System.out.println("entry----"+aclEntry);
}
System.out.println();
UserPrincipalLookupService upls = file.getFileSystem().getUserPrincipalLookupService();
UserPrincipal user = upls.lookupPrincipalByName(System.getProperty("hitesh_golhani"));
AclEntry.Builder builder = AclEntry.newBuilder();
builder.setPermissions( EnumSet.of(AclEntryPermission.READ_DATA, AclEntryPermission.EXECUTE,
AclEntryPermission.READ_ACL, AclEntryPermission.READ_ATTRIBUTES, AclEntryPermission.READ_NAMED_ATTRS,
AclEntryPermission.WRITE_ACL, AclEntryPermission.DELETE
));
builder.setPrincipal(user);
builder.setType(AclEntryType.ALLOW);
aclAttr.setAcl(Collections.singletonList(builder.build()));*/
System.out.println("Exe = "+file1.canExecute());
System.out.println("Read = "+file1.canRead());
System.out.println("Wrt = "+file1.canWrite());
}
关于java - 限制用户删除、重命名和修改Windows中使用Java创建的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43202388/