2013-01-19 6 views
11

Ich bin mit Java 7 File API. Ich schrieb eine Klasse, die fein auf Ubuntu Erstellen von Verzeichnissen perfekt funktioniert, aber wenn ich denselben Code auf Windows laufen dann wird es Fehler werfen:java.lang.UnsupportedOperationException: 'posix: Berechtigungen' nicht als Anfang Attribut unter Windows unterstützt

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) 

Mein Ordner Klassencode ist

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

    } 
} 

Der Fehler ist aus Richtung createFolder Methode der Folder.

Wie behebe ich diesen Fehler?

+2

Windows-= Posix: In älteren Versionen würden Sie (Windows-Version) verwenden. Warum hast du erwartet, dass das funktioniert? – EJP

Antwort

15

Sie PosixFilePermission verwenden, die nur mit Betriebssystemen verwendet werden kann, die mit POSIX compatibile sind:

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-leider nicht POSIX-Dateisysteme unterstützt, so ist dies, warum Ihr Code funktioniert nicht. Um ein Verzeichnis in Windows erstellen sollten Sie verwenden:

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

Die / wird \ in Windows automatisch geändert werden. Wenn Sie den gesamten Pfad auf einmal erstellen möchten, müssen Sie die Methode mkdirs() verwenden. Weitere Informationen: http://docs.oracle.com/javase/6/docs/api/java/io/File.html

Um Dateiberechtigungen in Windows festzulegen, müssen Sie setReadable(), setWritable() und setExecutable() verwenden. Das sind File Klassenmethoden und legen nur die Berechtigungen des Dateieigentümers fest. Beachten Sie, dass die genannten Methoden in Java 1.6 hinzugefügt wurden. !

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

+0

Ja, ich möchte wissen, was der Code sollte ein Verzeichnis in Windows für die Erstellung !! –

+0

Hey, empfehlen nicht mit 'File' :( – fge

+0

und ein wahrscheinlicher ein letztes Wie der Name des Inhabers der Datei in dem obigen Code ändern ?? antworten Sie bitte !! –