[NIO.2] 第十五篇 属性视图之 POSIX View_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > [NIO.2] 第十五篇 属性视图之 POSIX View

[NIO.2] 第十五篇 属性视图之 POSIX View

 2014/3/28 21:52:18  cucaracha  程序员俱乐部  我要评论(0)
  • 摘要:对于Unix用户来说是个好消息!POSIX视图扩展Basic视图并支持Unix及其它相关操作系统。POSIX视图支持文件所有者、组拥有者、以及九个访问权限。基于PosixFileAttributes类,可以通过下面的方式得到POSIX属性:importjava.io.IOException;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;importjava.nio.file
  • 标签:view
对于 Unix 用户来说是个好消息!POSIX 视图扩展 Basic 视图并支持 Unix 及其它相关操作系统。POSIX 视图支持文件所有者、组拥有者、以及九个访问权限
基于 PosixFileAttributes 类,可以通过下面的方式得到 POSIX 属性:

class="java" name="code">import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.nio.file.attribute.PosixFileAttributes; 
… 
PosixFileAttributes attr = null; 
Path path = Paths.get("/home/rafaelnadal/tournaments/2009/BNP.txt"); 
try { 
    attr = Files.readAttributes(path, PosixFileAttributes.class); 
} catch (IOException e) { 
    System.err.println(e); 
} 
 
 System.out.println("File owner: " + attr.owner().getName()); 
 System.out.println("File group: " + attr.group().getName()); 
 System.out.println("File permissions: " + attr.permissions().toString()); 


或者,也可以通过 Files.getFileAttributeView() 来获取 POSIX 属性:

import java.nio.file.attribute.PosixFileAttributeView; 
… 
try { 
    attr = Files.getFileAttributeView(path,  
                  PosixFileAttributeView.class).readAttributes(); 
} catch (IOException e) { 
    System.err.println(e); 
} 


Posix 属性视图支持以下属性名:

  • group
  • permissions


访问属性的通用结构是 [view-name:]attribute-name,在这里 view-name 是 posix。

POSIX 文件权限

调用 permissions() 方法会返回 PosixFilePermission 对象列表。PosixFilePermissions 是一个文件权限的帮助类,它有一个比较有用的方法是 asFileAttribute(),这个方法接受一个 Set 类型的权限列表,然后可以将返回值传给 Path.createFile() 方法或者 Path.createDirectory() 方法。这可以用于创建一个新文件,并让新文件和已有文件具有相同权限的时候:

import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.nio.file.attribute.FileAttribute; 
import java.nio.file.attribute.PosixFileAttributes; 
import java.nio.file.attribute.PosixFilePermission; 
import java.nio.file.attribute.PosixFilePermissions; 
import java.util.Set; 
… 
Path new_path = Paths.get("/home/rafaelnadal/tournaments/2009/new_BNP.txt"); 
FileAttribute<Set> posixattrs =   
                       PosixFilePermissions.asFileAttribute(attr.permissions()); 
try { 
    Files.createFile(new_path, posixattrs); 
} catch (IOException e) { 
    System.err.println(e); 
} 
Moreover, you can set a file’s permissions as a hard-coded string by calling the fromString() 
method: 
Set permissions = PosixFilePermissions.fromString("rw-r--r--"); 
try { 
    Files.setPosixFilePermissions(new_path, permissions); 
} catch (IOException e) { 
    System.err.println(e); 
} 


POSIX 组拥有者

Posix 属性视图中,组拥有者属性名称是 group。setGroup() 方法可以传入一个 GroupPrincipal 类型的参数来设置组拥有者,GroupPrincipal 继承自 UserPrincipal:

import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.nio.file.attribute.GroupPrincipal; 
import java.nio.file.attribute.PosixFileAttributeView; 
… 
Path path = Paths.get("/home/rafaelnadal/tournaments/2009/BNP.txt"); 
try { 
    GroupPrincipal group = path.getFileSystem(). 
               getUserPrincipalLookupService().lookupPrincipalByGroupName("apressteam"); 
    Files.getFileAttributeView(path, PosixFileAttributeView.class).setGroup(group); 
} catch (IOException e) { 
    System.err.println(e); 
} 


注意:在上面的例子中使用了名为“apressteam”的组,这在你的机器上可能不存在,因此你在运行上面的代码时会抛出 java.nio.file.attribute.UserPrincipalNotFoundException 异常,要想正常运行,你需要在你的机器上添加正确的组名(管理员组或其它适合权限的组)。

可以直接调用 Files.getAttribute() 来得到组拥有者:

import static java.nio.file.LinkOption.NOFOLLOW_LINKS; 
… 
try { 
    GroupPrincipal group = (GroupPrincipal) Files.getAttribute(path, "posix:group", 
                                                                       NOFOLLOW_LINKS); 
    System.out.println(group.getName()); 
} catch (IOException e) { 
    System.err.println(e); 
} 


注:因为 PosixFileAttributeView 继承了 FileOwnerAttributeView 接口,因此可以直接调用 getOwner() 和 setOwner() 方法来操作文件所有者。

文章来源:http://www.aptusource.org/2014/03/nio-2-posix-view/
上一篇: httpclient https请求 下一篇: 没有下一篇了!
发表评论
用户名: 匿名