簡體   English   中英

java.lang.UnsupportedOperationException: 'posix:permissions' 不支持作為 Windows 上的初始屬性

[英]java.lang.UnsupportedOperationException: 'posix:permissions' not supported as initial attribute on Windows

我正在使用 Java 7 文件 API。 我寫了一個在 Ubuntu 創建目錄上運行良好的類,但是當我在 Windows 上運行相同的代碼時,它會拋出錯誤:

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);

    }
}

錯誤來自Folder createFolder方法。

如何解決此錯誤?

您使用PosixFilePermission ,它只能用於與 POSIX 兼容的操作系統:

一種文件屬性視圖,它提供通常與文件系統上的文件相關聯的文件屬性視圖,這些文件系統由實現便攜式操作系統接口 (POSIX) 標准系列的操作系統使用。

實現 POSIX 系列標准的操作系統通常使用具有文件所有者、組所有者和相關訪問權限的文件系統。 此文件屬性視圖提供對這些屬性的讀寫訪問

不幸的是,Windows 不支持 POSIX 文件系統,所以這就是您的代碼不起作用的原因。 為了在 Windows 中創建目錄,您應該使用:

new File("/path/to/folder").mkdir();

在 Windows 中/將自動更改為\\ 如果你想一次創建整個路徑,你必須使用mkdirs()方法。 更多信息: http : //docs.oracle.com/javase/6/docs/api/java/io/File.html

為了在 Windows 中設置文件權限,您必須使用setReadable()setWritable()setExecutable() 那是File類方法,只設置文件所有者的權限。 請注意,上述方法是在 Java 1.6 中添加的。 在舊版本中,您必須使用(Windows 版本):

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM