18

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

    }
}

createFolderエラーは のメソッドから発生していますFolder

このエラーを解決するにはどうすればよいですか?

4

1 に答える 1

25

PosixFilePermissionwhich は、POSIX と互換性のあるオペレーティング システムでのみ使用できます。

標準の Portable Operating System Interface (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");

于 2013-01-19T15:47:57.490 に答える