java.lang.UnsupportedOperationException:&x27;posix:权限';Windows上不支持将其作为初始属性
我正在使用Java7文件API。我写了一个在Ubuntu上运行良好的类,它完美地创建了目录,但当我在Windows上运行相同的代码时,它抛出了错误:java.lang.UnsupportedOperationException:&x27;posix:权限';Windows上不支持将其作为初始属性,java,java-7,nio,java-io,unsupportedoperation,Java,Java 7,Nio,Java Io,Unsupportedoperation,我正在使用Java7文件API。我写了一个在Ubuntu上运行良好的类,它完美地创建了目录,但当我在Windows上运行相同的代码时,它抛出了错误: Exception in thread "main" java.lang.UnsupportedOperationException: 'posix:permissions' not supported as initial attribute at sun.nio.fs.WindowsSecurityDescriptor.fromAttr
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);
}
}
package com.cloudspeak.folder\u权限;
导入java.io.IOException;
导入java.nio.file.Files;
导入java.nio.file.Path;
导入java.nio.file.attribute.FileAttribute;
导入java.nio.file.attribute.PosixFilePermission;
导入java.nio.file.attribute.UserPrincipal;
导入java.util.Set;
公共类文件夹{
//创建文件夹所需的属性
私人用户主要所有者;
专用路径文件夹名称;
私有文件属性属性属性;
公用文件夹(UserPrincipal所有者、路径文件夹名称、文件属性属性属性){
这个。所有者=所有者;
this.folder\u name=文件夹\u name;
this.attr=attr;
}
//调用此方法将创建文件夹
公用文件夹(){
试一试{
//createDirectory函数用于覆盖现有文件夹,而不是createDirectory()方法
创建目录(文件夹名称,attr);
Files.setOwner(文件夹名称、所有者);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
System.out.println(“已创建文件夹”+此文件夹名称);
}
}
错误来自文件夹
的创建文件夹
方法
如何解决此错误?您使用的是
PosixFilePermission
,它只能用于与POSIX兼容的操作系统:
一种文件属性视图,它提供了与实现可移植操作系统接口(POSIX)标准系列的操作系统所使用的文件系统上的文件通常关联的文件属性的视图
实现POSIX标准系列的操作系统通常使用具有文件所有者、组所有者和相关访问权限的文件系统。此文件属性视图提供对这些属性的读写访问`
Windows不支持POSIX文件系统,所以这就是代码无法工作的原因。要在Windows中创建目录,应使用:
新文件(“/path/to/folder”).mkdir()代码>
在Windows中,/
将自动更改为\
。如果要一次创建整个路径,必须使用mkdirs()
方法。更多信息:
要在Windows中设置文件权限,必须使用setReadable()
、setWritable()
和setExecutable()
。它们是文件
类方法,只设置文件所有者的权限。注意,上述方法是在Java1.6中添加的。在旧版本中,您必须使用(Windows版本):
Runtime.getRuntime().exec(“attrib-r myFile”)代码>是的,我想知道在windows中创建目录的代码应该是什么!!嘿,不要建议使用文件
:(还有一个可能是最后一个如何在上面的代码中更改文件所有者的名称??请回答!!嗯..老实说,我从来没有这样做过。你以前的代码不起作用吗(使用1.7库)?如果没有,您必须记住,例如FAT32文件系统没有类似“文件所有者”的内容。好的,如果没有类似文件所有者的内容,请告诉如何在java的FAT32系统中为用户提供读/写访问权限。用户名是rashmi,并以管理员身份运行该代码。它应该可以在我的系统上运行!!