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

[NIO.2] 第十四篇 属性视图之 File Owner View

阅读更多
大多数文件系统都有文件所有者的概念,并且决定了访问文件系统对象的权限。在 NIO.2 中,提供了 UserPrincipal 接口来关联文件所有者这个概念,并且提供了 FileOwenerAttributeView 接口来设置和读取文件所有者。

注:在本文的例子中使用的文件所有者名称为“apress”,但是在你的系统上可能没有这个用户。运行测试代码的时候会抛出 java.nio.file.attribute.UserPrincipalNotFoundException,你需要添加这个用户在你的机器上才能正常运行(这个用户必须拥有管理员权限或其它适合的系统权限)。

使用 Files.setOwner() 设置文件所有者

可以调用 Files.setOwner() 来设置文件所有者。这个方法需要传入 UserPrincipal 类型的对象。可以通过调用 FileSystem.getUserPrincipalLookupService() 方法来获取用户查找服务,然后调用 lookupPrincipalByName() 方法得到 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.UserPrincipal; 
... 
UserPrincipal owner = null; 
Path path = Paths.get("C:/rafaelnadal/tournaments/2009", "BNP.txt"); 
try { 
    owner = path.getFileSystem().getUserPrincipalLookupService(). 
                                       lookupPrincipalByName("apress"); 
    Files.setOwner(path, owner); 
} catch (IOException e) { 
    System.err.println(e); 
}


使用 FileOwnerAttributeView.setOwner() 设置文件所有者

FileOwnerAttributeView 属性视图支持读取和设置文件所有者。这个属性视图的名称为 owner,设置文件所有者的时候也需要 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.FileOwnerAttributeView; 
import java.nio.file.attribute.UserPrincipal; 
... 
UserPrincipal owner = null; 
Path path = Paths.get("C:/rafaelnadal/tournaments/2009", "BNP.txt"); 
FileOwnerAttributeView foav = Files.getFileAttributeView(path,  
                                           FileOwnerAttributeView.class); 
try { 
    owner = path.getFileSystem().getUserPrincipalLookupService(). 
                                 lookupPrincipalByName("apress"); 
    foav.setOwner(owner); 
} catch (IOException e) { 
    System.err.println(e); 
}


使用 Files.setAttribute() 设置文件所有者

和大多数属性视图一样,文件所有者属性也可以通过通用的 setAttribute() 方法来进行设置,这个属性的完整名称是 owner:owner,下面看看例子:

import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.nio.file.attribute.UserPrincipal; 
import static java.nio.file.LinkOption.NOFOLLOW_LINKS; 
… 
UserPrincipal owner = null; 
Path path = Paths.get("C:/rafaelnadal/tournaments/2009", "BNP.txt"); 
try { 
    owner = path.getFileSystem().getUserPrincipalLookupService(). 
                                 lookupPrincipalByName("apress"); 
    Files.setAttribute(path, "owner:owner", owner, NOFOLLOW_LINKS); 
} catch (IOException e) { 
    System.err.println(e); 
}


使用 FileOwnerAttributeView.getOwner() 获取文件所有者

在判断文件使用权限的时候,常常需要获取文件所有者。 getOwner() 方法返回文件所有者的 UserPrincipal 对象。可以调用 UserPrincipal.getName() 方法将对象转换为 String 类型。

import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.nio.file.attribute.FileOwnerAttributeView; 
… 
Path path = Paths.get("C:/rafaelnadal/tournaments/2009", "BNP.txt"); 
FileOwnerAttributeView foav = Files.getFileAttributeView(path,  
                                        FileOwnerAttributeView.class); 
try { 
    String owner = foav.getOwner().getName(); 
    System.out.println(owner); 
} catch (IOException e) { 
    System.err.println(e); 
} 


使用 Files.getAttribute() 获取文件所有者

最后一个例子,我们使用通用的 Files.getAttribute() 来获取文件所有者。

import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.nio.file.attribute.UserPrincipal; 
import static java.nio.file.LinkOption.NOFOLLOW_LINKS; 
… 
Path path = Paths.get("C:/rafaelnadal/tournaments/2009", "BNP.txt"); 
try {             
    UserPrincipal owner = (UserPrincipal) Files.getAttribute(path,  
                                               "owner:owner", NOFOLLOW_LINKS); 
    System.out.println(owner.getName()); 
    } catch (IOException e) { 
        System.err.println(e); 
    } 


注意:在使用用户查找服务(principal lookup service)的时候,如果用户不存在或者传入了错误的用户名,将会抛出 java.nio.file.attribute.UserPrincipalNotFoundException 异常。

File Owner 支持以下属性名称:
  • owner

访问属性的通用结构是 [view-name:]attribute-name,在这个例子中 view-name 是 owner,attribute-name 是 owner。

文章来源:http://www.aptusource.org/2014/03/nio-2-file-owner-view/
分享到:
评论

相关推荐

    java NIO.zip

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

    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 IO, NIO and NIO.2 原版pdf by Friesen

    Chapters 12 through 14 cover NIO.2’s improved file system interface, asynchronous I/O, and the completion of socket channel functionality. Each chapter ends with assorted exercises that are designed...

    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...

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

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

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

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

    JDK1.7 之java.nio.file.Files 读取文件仅需一行代码实现

    JDK1.7 之 java.nio.file.Files 读取文件仅需一行代码实现 java.nio.file.Files 类是 JDK1.7 中引入的新的文件操作类,该类包含了许多有用的方法来操作文件。其中,Files.readAllBytes(Path) 方法可以将整个文件...

    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 ...

    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)。...

    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,支持异步文件操作,可以在后台线程中执行...

    Java.NIO资源下载资源下载

    根据提供的文件信息,我们可以提取并总结出关于Java NIO(New Input/Output)的重要知识点。 ### Java NIO 概述 Java NIO 是 Java 平台的一个重要特性,首次出现在 Java 1.4 版本中。它为 Java 开发者提供了一套...

    Java NIO.pdf

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

    Apress.Pro.Java.7.NIO.2.2011

    《Apress.Pro.Java.7.NIO.2.2011》这本书专注于讲解Java 7中的非阻塞I/O(Non-blocking I/O, NIO)和NIO 2的高级特性,是Java开发者深入理解这一关键领域的重要参考资料。NIO在Java平台中扮演着至关重要的角色,特别...

    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 ...

Global site tag (gtag.js) - Google Analytics