Reputation: 193
I am creating a file in Windows and want to restrict the user to delete, rename and modify the file created. I am using the below code to create the file and have given Read-only permissions. However, users are able to modify the file created.
Thanks a lot.
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());
}
}
Upvotes: 2
Views: 826
Reputation: 514
I tried below ways to restrict user to delete, rename and modify the file. Please do try the same and make it work. After providing the permissions, we have to revoke the privileges form the users
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());
}
Upvotes: 1