2017-04-04 46 views
1

我正在Windows中创建一个文件,并希望限制用户删除,重命名和修改所创建的文件。我正在使用下面的代码来创建该文件并赋予只读权限。但是,用户可以修改所创建的文件。限制用户删除,重命名和修改使用Java.in 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()); 

     } 


} 
+0

'file.setExecutable'等等返回布尔值来表示它们是否成功。这是值得检查的。 – Michael

+0

@Michael,Codebeginner需要一个逻辑来限制用户删除,重命名或修改创建的文件。上面的代码只是一些试验。在设置之前和之后检查权限。谢谢 –

+0

@HiteshKumar我明白了所有这一切。我的诊断过程的第一步是检查这些函数的返回值。他们大概回复错误,但如果他们不是? – Michael

回答

1

我试过下面的方法来限制用户删除,重命名和修改文件。请尝试相同的方式并使其工作。在提供权限后,我们必须撤消用户的权限

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());   
    } 
+0

我正在尝试使用icacls命令来授予/拒绝权限并使用java运行命令。 –

+0

删除访问: \t \t \t'ICACLS路径/删除:克用户名:(OI)(CI)F/T'提供读ACCES: \t \t \t'ICACLS路径/授予用户名:(OI)(CI)R/T' –

相关问题