java.lang.UnsupportedOperationException:'posix:permissions'不支持作为Windows上的初始属性 [英] java.lang.UnsupportedOperationException: 'posix:permissions' not supported as initial attribute on Windows

查看:2623
本文介绍了java.lang.UnsupportedOperationException:'posix:permissions'不支持作为Windows上的初始属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Java 7 File API。我编写了一个在Ubuntu上运行良好的类,可以完美地创建目录,但是当我在Windows上运行相同的代码时,它会抛出错误:

I am using Java 7 File API. I wrote a class that is working fine on Ubuntu creating directories perfectly, but when I run same code on Windows then it is throwing error:

Exception in thread "main" java.lang.UnsupportedOperationException: 'posix:permissions' not supported as initial attribute
    at sun.nio.fs.WindowsSecurityDescriptor.fromAttribute(Unknown Source)
    at sun.nio.fs.WindowsFileSystemProvider.createDirectory(Unknown Source)
    at java.nio.file.Files.createDirectory(Unknown Source)
    at java.nio.file.Files.createAndCheckIsDirectory(Unknown Source)
    at java.nio.file.Files.createDirectories(Unknown Source)
    at com.cloudspoke.folder_permission.Folder.createFolder(Folder.java:27)
    at com.cloudspoke.folder_permission.Main.main(Main.java:139)

我的文件夹类代码是

package com.cloudspoke.folder_permission;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.FileAttribute;
import java.nio.file.attribute.PosixFilePermission;
import java.nio.file.attribute.UserPrincipal;
import java.util.Set;

public class Folder{
    // attributes required for creating a Folder
    private UserPrincipal owner;
    private Path folder_name;
    private FileAttribute<Set<PosixFilePermission>> attr;


    public Folder(UserPrincipal owner,Path folder_name,FileAttribute<Set<PosixFilePermission>> attr){
        this.owner=owner;
        this.folder_name=folder_name;
        this.attr=attr;
    }
    //invoking this method will create folders
    public  void createFolder(){
        try {
            //createDirectories function is used for overwriting existing folder instead of createDirectory() method
            Files.createDirectories(folder_name, attr);
            Files.setOwner(folder_name, owner);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        System.out.println("created Folder "+this.folder_name);

    }
}

错误来自 createFolder 文件夹的方法。

如何解决此错误?

推荐答案

您使用 PosixFilePermission ,它只能用于操作系统与POSIX兼容:

You use PosixFilePermission which can be used only with operating systems which are compatibile with POSIX:

文件属性视图,提供通常与操作系统使用的文件系统上的文件相关联的文件属性的视图实现便携式操作系统接口(POSIX)系列标准。

实现POSIX系列的操作系统标准通常使用具有文件所有者,组所有者和相关访问权限的文件系统。此文件属性视图提供对这些属性的读写访问权限

Windows不幸地不支持POSIX文件系统所以这就是为什么你的代码没有不行。要在Windows中创建目录,您应该使用:

Windows unfortunatelly doesn't support POSIX file systems so this is why your code doesn't work. In order to create a directory in Windows you should use:

new File(/ path / to / folder)。mkdir();

/ 将自动更改为 \ Windows中的。如果要立即创建整个路径,则必须使用 mkdirs()方法。更多信息: http://docs.oracle.com/ javase / 6 / docs / api / java / io / File.html

The / will be automatically changed to \ in Windows. If you want to create the whole path at once you have to use mkdirs() method. More info: http://docs.oracle.com/javase/6/docs/api/java/io/File.html

要在Windows中设置文件权限,您必须使用 setReadable() setWritable() setExecutable()。这是文件类方法,只设置文件所有者的权限。请注意,在Java 1.6中添加了所提到的方法。在旧版本中,您必须使用(Windows版本):

In order to set file permissions in Windows you have to use setReadable(), setWritable() and setExecutable(). That are File class methods and set only file owner's permissions. Note that mentioned methods were added in Java 1.6. In older versions you would have to use (Windows version):

Runtime.getRuntime()。exec(attrib -r myFile);

这篇关于java.lang.UnsupportedOperationException:'posix:permissions'不支持作为Windows上的初始属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆