java.lang.UnsupportedOperationException: "posix:permissions" не поддерживается как начальный атрибут в Windows
Я использую Java 7 File 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
,
Как мне решить эту ошибку?
1 ответ
Ты используешь PosixFilePermission
которые могут использоваться только с операционными системами, совместимыми с POSIX:
A file attribute view that provides a view of the file attributes commonly associated with files on file systems used by operating systems that implement the Portable Operating System Interface (POSIX) family of standards.
Operating systems that implement the POSIX family of standards commonly use file systems that have a file owner, group-owner, and related access permissions. This file attribute view provides read and write access to these attributes
К сожалению, Windows не поддерживает файловые системы POSIX, поэтому ваш код не работает. Чтобы создать каталог в Windows, вы должны использовать:
new File("/path/to/folder").mkdir();
/
будет автоматически изменен на \
в винде. Если вы хотите создать весь путь сразу, вы должны использовать 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");