java.lang.UnsupportedOperationException:'posix:permissions'不支持作为Windows上的初始属性 [英] java.lang.UnsupportedOperationException: 'posix:permissions' not supported as initial attribute on Windows
问题描述
我正在使用Java 7 File API。我编写了一个在Ubuntu上运行良好的类,可以完美地创建目录,但是当我在Windows上运行相同的代码时,它会抛出错误:
I am using Java 7 File API. I wrote a class that is working fine on Ubuntu creating directories perfectly, but when I run same code on Windows then it is throwing error:
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
文件夹
的方法。
如何解决此错误?
推荐答案
您使用 PosixFilePermission
,它只能用于操作系统与POSIX兼容:
You use PosixFilePermission
which can be used only with operating systems which are compatibile with POSIX:
文件属性视图,提供通常与操作系统使用的文件系统上的文件相关联的文件属性的视图实现便携式操作系统接口(POSIX)系列标准。
实现POSIX系列的操作系统标准通常使用具有文件所有者,组所有者和相关访问权限的文件系统。此文件属性视图提供对这些属性的读写访问权限
Windows不幸地不支持POSIX文件系统所以这就是为什么你的代码没有不行。要在Windows中创建目录,您应该使用:
Windows unfortunatelly doesn't support POSIX file systems so this is why your code doesn't work. In order to create a directory in Windows you should use:
new File(/ path / to / folder)。mkdir();
/
将自动更改为 \ Windows中的
。如果要立即创建整个路径,则必须使用 mkdirs()
方法。更多信息: http://docs.oracle.com/ javase / 6 / docs / api / java / io / File.html
The /
will be automatically changed to \
in Windows. If you want to create the whole path at once you have to use mkdirs()
method. More info: http://docs.oracle.com/javase/6/docs/api/java/io/File.html
要在Windows中设置文件权限,您必须使用 setReadable()
, setWritable()
和 setExecutable()
。这是文件
类方法,只设置文件所有者的权限。请注意,在Java 1.6中添加了所提到的方法。在旧版本中,您必须使用(Windows版本):
In order to set file permissions in Windows you have to use setReadable()
, setWritable()
and setExecutable()
. That are File
class methods and set only file owner's permissions. Note that mentioned methods were added in Java 1.6. In older versions you would have to use (Windows version):
Runtime.getRuntime()。exec(attrib -r myFile);
这篇关于java.lang.UnsupportedOperationException:'posix:permissions'不支持作为Windows上的初始属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!