【问题标题】:Create Directory with public read permissions in Java在 Java 中创建具有公共读取权限的目录
【发布时间】:2016-02-11 11:52:40
【问题描述】:

我想创建具有公共读/写权限的文件夹。这需要稍后在 Unix 上运行,这就是我添加 Posix 代码的原因,但目前我正在 windows 上开发。

下面的代码尝试使用 f.setWriteable() 创建一个具有写入权限的文件。但是代码输出:

'创建可写假可读真文件'

目录已创建,但没有可写权限。 , 因为 writeable boolean check 是 false , f.setWriteable 的结果。

我可以毫无问题地对文件执行 setWriteable,但似乎无法在文件夹上执行此操作。

如何创建具有合适权限跨平台的文件夹?

我认为这可能是因为我使用了绝对路径,而不是相对路径,但找不到这方面的信息。

import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.attribute.PosixFilePermission;
import java.util.HashSet;
import java.util.Set;

public class FileTest
{
    public static void main( String[] args )
    {
        String path = "C:/home/1/";
        File f = new File( path );
        if ( !f.exists() )
        {

            boolean success = f.mkdirs();
            boolean writeable = f.setWritable( true, false );
            boolean readable = f.setReadable( true, false );
            System.out.println( "creating file that is writeable " + writeable + " readable " +
                readable );
            if ( !success )
            {
                System.out.println( "Folder Directory not found.{}" );
            }
            boolean isPosix = FileSystems.getDefault().supportedFileAttributeViews()
                .contains( "posix" );
            if ( isPosix )
            {
                // using PosixFilePermission to set file permissions
                Set<PosixFilePermission> perms = new HashSet<>();
                perms.add( PosixFilePermission.OWNER_READ );
                perms.add( PosixFilePermission.OWNER_WRITE );
                perms.add( PosixFilePermission.GROUP_READ );
                perms.add( PosixFilePermission.GROUP_WRITE );
                perms.add( PosixFilePermission.OTHERS_READ );
                perms.add( PosixFilePermission.OTHERS_WRITE );
                try
                {
                    Files.setPosixFilePermissions( Paths.get( path ), perms );
                    // if ( LOGGER.isDebugEnabled() )
                    // {
                    System.out.println( "Set Posix permissions" );
                    // }

                }
                catch ( IOException e )
                {
                    System.out.println( "Unable to set posix permissions" );
                }
            }
        }
    }
}

【问题讨论】:

  • Windows 不像 Unix/POSIX 那样拥有权限。通常,文件有一位防止写入,但没有自我/组/其他之间的区别,也没有控制读取或执行的位。对于目录,您甚至无法阻止写入。对于 NTFS 而不是 FAT,您有 ACL,它表示比 POSIX 更详细的限制,但它们在不同版本的 Windows 上有所不同。在源代码中,我必须为 java_io_WinNTFileSystem_setPermission 提供(早期的 java8)windows/native 甚至不尝试处理 ACL,它只实现一个不写位,并且只在非目录上实现。

标签: java file directory java-io


【解决方案1】:

如果您使用的是 Java7,那么也许这就是答案:
http://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileLock.html

【讨论】:

  • 请在链接材料中提供答案摘要,以防链接失效、被移动或以其他方式更改。
猜你喜欢
  • 2019-06-13
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 2016-04-15
  • 1970-01-01
  • 2011-01-17
  • 2013-05-23
  • 2018-11-20
相关资源
最近更新 更多