`
cucaracha
  • 浏览: 141271 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A8f3fa2f-18ce-3862-897a-5d2209197c90
Java NIO.2
浏览量:87821
7a076ba7-8ec8-3241-aa3c-67bb2f7856a2
Java EE 7 简明教...
浏览量:36666
社区版块
存档分类
最新评论

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

阅读更多
对于 Unix 用户来说是个好消息!POSIX 视图扩展 Basic 视图并支持 Unix 及其它相关操作系统。POSIX 视图支持文件所有者、组拥有者、以及九个访问权限。
基于 PosixFileAttributes 类,可以通过下面的方式得到 POSIX 属性:

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/
0
0
分享到:
评论

相关推荐

    Java IO, NIO and NIO.2(Apress,2015)

    Java I/O, NIO, and NIO.2 is a power-packed book that accelerates your mastery of Java's various I/O APIs. In this book, you'll learn about classic I/O APIs (File, RandomAccessFile, the stream classes ...

    java NIO.zip

    通道是NIO中的核心概念之一,它提供了从一个数据源(如文件、套接字)到另一个数据源的数据传输路径。Java NIO支持多种类型的通道,包括文件通道(FileChannel)、套接字通道(SocketChannel)和服务器套接字通道...

    Java IO, NIO and NIO.2 原版pdf by Friesen

    New I/O (NIO), and NIO.2 categories. You learn what each category offers in terms of its capabilities, and you also learn about concepts such as paths and Direct Memory Access. Chapters 2 through 5 ...

    Java IO, NIO and NIO.2

    Java IO、NIO以及NIO.2是Java中用于处理输入/输出操作的三种主要机制。本书《Java IO, NIO and NIO.2》旨在深入浅出地介绍这些机制,同时书中内容均为英文。接下来将详细介绍这些知识点。 **Java IO** Java IO是...

    Pro Java 7 NIO.2.pdf

    根据提供的文件信息,“Pro Java 7 NIO.2.pdf”由Anghel Leonard于2011年编写,主要介绍了Java 7中的新输入/输出(NIO)API,特别是NIO.2(JSR 203)所带来的增强功能。这本书通过一系列章节详细讲解了如何使用NIO.2...

    NIO.2 入门,第 2 部分: 文件系统 API

    本篇我们将深入探讨NIO.2中的几个关键概念和类,包括`Files`, `Path`, `FileAttributes`, `DirectoryWatcher`以及`FileVisitor`。这些组件极大地增强了Java对操作系统文件系统的访问能力。 首先,`Path`接口是NIO.2...

    java nio.pdf

    java nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava ...

    Java I/O, NIO and NIO.2

    Java I/O, NIO, 和 NIO.2 是Java平台中处理输入/输出操作的核心组件,对于任何Java开发者来说,理解和掌握这些概念至关重要。本文将深入探讨这些技术,旨在提供一个全面而详尽的概述。 Java I/O(Input/Output)是...

    Java NIO 中英文版 + Pro Java 7 NIO.2

    `Pro Java 7 NIO.2`这本书由Anghel Leonard著,深入探讨了Java NIO.2 API,这是Java 7引入的进一步扩展,包括: 1. **文件系统API增强**:新增了AsynchronousFileChannel,支持异步文件操作,可以在后台线程中执行...

    nio.zip_NIO_NewIO_NIO.c_java NIO chm_java nio

    缓冲区则用于存储和传输数据,它是NIO的关键组件,具有容量、位置、限制等属性,并支持多种操作,如读写、反转、清除等。选择器允许单个线程同时监控多个通道,当某个通道准备进行读写操作时,选择器会通知我们,...

    Pro Java 7 NIO.2

    This book covers all the important aspects involved in developing NIO.2-based applications. It provides clear instructions for getting the most out of NIO.2 and offers many exercises and case studies ...

    Java NIO.pdf

    Java NIO.pdf nio教程 Java NIO.pdf nio教程 java nio

    nio.rar_FastCopyFile.java_NIO_UseFloatBuffer.java_java nio_文件锁

    Java NIO(New Input/Output)是Java标准库中提供的一种I/O模型,与传统的BIO( Blocking I/O)相比,NIO具有更好的性能和更高的灵活性。NIO的核心组件包括通道(Channel)、缓冲区(Buffer)和选择器(Selector)。...

    ProJava7NIO.2PDFBooks.pdf 英文原版

    Pro Java 7 NIO.2 – PDF Books

    优雅的操作文件:java.nio.file 库介绍.pdf

    【java.nio.file库详解】 Java 早期版本的文件I/O操作功能相对有限,存在几个显著问题:不支持现代文件系统特性、API设计复杂且冗长、处理大文件和并发性能不足。为了解决这些问题,Java引入了`java.nio.file`库,...

    蔚来-NIO.US-新车上市,蔚来可期.pdf

    蔚来(NIO.US)新车上市,蔚来可期 蔚来(NIO.US)是一家中国的新能源汽车制造商,专注于生产高性能的电动汽车。 公司的目标是成为中国最大的新能源汽车品牌,并且跻身全球汽车行业的前列。 蔚来2025年目标价45.5...

Global site tag (gtag.js) - Google Analytics