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> attr; public Folder(UserPrincipal owner,Path folder_name,FileAttribute<Set> 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兼容的操作系统:

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

/将在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");