java - 限制用户删除、重命名和修改Windows中使用Java创建的文件

标签 java file-io file-permissions java-io

我正在 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/

相关文章:

java - JSON 映射到 Java 返回空值

c++ - C++ “Using Uninitialized Memory.. (variable name) ”

powershell - Powershell Out-File在文件顶部添加换行符-Out-File与Set-Content

linux - 每次上传新文件时出现 403 Forbidden 错误

macos - UNIX/Linux/Mac OSX获得文件许可号

docker - ddev + elasticsearch的最新版本

java - java 中的 AES256 错误

java - 需要一种方法以黑/白方式获取图像中的文本

java - 如何在 ViewModel android 中使用 mBagOfTags?

file-io - 文件读取未完成