java.lang.UnsupportedOperationException: 'posix: permissions' n'est pas supporté comme attribut initial sous Windows
Je suis à l'aide de Java 7 Fichier API. J'ai écrit une classe qui fonctionne très bien sur Ubuntu en créant des répertoires parfaitement, mais lorsque je lance le même code sur Windows alors qu'il est en train de jeter erreur:
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)
Mon Dossier code de la classe est
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);
}
}
L'erreur provient de createFolder
méthode de Folder
.
Comment puis-je résoudre ce problème?
source d'informationauteur Ritesh Mehandiratta
Vous devez vous connecter pour publier un commentaire.
Vous utilisez
PosixFilePermission
qui peut être utilisé uniquement avec les systèmes d'exploitation qui sont compatibles avec la norme 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 malheureusement ne prend pas en charge la norme POSIX systèmes de fichiers c'est pourquoi, votre code ne fonctionne pas. Afin de créer un répertoire dans Windows, vous devez utiliser:
new File("/path/to/folder").mkdir();
La
/
sera automatiquement changé en\
dans Windows. Si vous souhaitez créer le chemin d'accès complet à la fois, vous devez utilisermkdirs()
méthode. Plus d'infos: http://docs.oracle.com/javase/6/docs/api/java/io/File.htmlAfin de définir des autorisations de fichier dans Windows, vous devez utiliser
setReadable()
setWritable()
etsetExecutable()
. Qui sontFile
les méthodes de la classe et définir seul le propriétaire du fichier, les permissions. Notez que mentionné méthodes ont été ajoutées dans la version 1.6 de Java. Dans les anciennes versions, vous auriez à utiliser (version Windows):Runtime.getRuntime().exec("attrib -r myFile");