暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

文件IO之二 文件属性File Attributes View读取(JAVA NIO2系列之三)

中间件技术讨论圈 2016-09-18
466

上一节讲过的Path,貌似很多人觉得没有啥作用,但是在JAVA NIO.2 中,很多后续的特性都是依赖于这个Path的;

例如本文中的Attibute属性,不同的操作系统中的文件有不同的属性,而这些操作都是在Path之后进行;

Attibute属性,在JAVA NIO.2 的文件系统中,根据操作系统特性的不同,分为几个不同的View,这些View的定义都在java.nio.file.attribute包中:


这些View怎么理解呢?

例如DOS系统下的文件,有可能该文件是系统文件(也就是System32下面的,或者标注为dll的),也有可能是windows的归档文件;

在linux(Posix)系统下,我们知道用户组的概念,这是Posix独有的(虽然后来windows模仿也有了),其次对于一个文件的权限,例如 drwxr-xr-x ,第一位代表目录或者文件,后面三组分别是读,写,执行的组合,分别代表用户,用户组,其它用户的权限,这种精炼的表达方法只有Posix中才有,如果想操作这个,那必须得是具体的View;

其次,文件还有很多的通用属性,例如LastModify,时间,等等;


上述这些属性,在java.io.File中是不可以访问的,而这个JAVA NIO.2中,就提供了这些接口可以针对于不同操作系统的文件进行修改,以View的形式,我们来看看一个程序,查看Windows7下到底支持什么?


FileSystems.getDefault是获取当前文件系统,这个在上一篇文章中,我们已经讲过,是当前环境的一个抽象;

FileSystem可以有方法,suuportedFileAttributeViews是看看当前环境支持多少种View?

遍历这个Set集合,获得了5种View,这也就意味着一个文件系统可以支持几种不同的View同时存在;


对于Win7来讲,几个不同的View为:

ACL:访问控制协议,如果当前文件系统支持这个协议,相当于会多一些属性可以操作,如permit,deny,并且可以对源进行控制和过滤;

Basic:基础的文件属性,如LastModify,time,创建时间,等等,这个比较通用;

Owner:创建者的属性

DOS:属于DOS系统;

我们可以看到,没有基于Posix的View,程序还是挺准的;

下面我们基于这几个View逐一的讲解一下。


1.Basic View

Basic View是文件的通用的属性,如下面的程序:


如我们可以获得文件的大小,创建时间,上次访问时间,上次修改时间,是否是文件夹,是否是符号链接文件...

这些属性,有的通过java.io可以获得,有的获得不到;


2.Dos View

Dos视图是基于Windows的Dos系统的,主要是有下面的几个属性:


能判断该文件是否只读,是否是隐藏文件(Windows独有)。是否是归档文件,是否是系统文件(System32)


3.File Owner View

这个文件Owner的View其实很简单,就是可以设置和修改文件的owner,这个在原有的java.io包中肯定是没有的:


上述的功能完成的是,首先查找当前文件系统中apress的用户权限,

然后将这个用户权限设置给BNP.txt的;


4.Posix View

前面提到了基于Posix的View,可以获得用户组,和权限:


权限就是drw--rw--rw这种字符串;这种字符串仅仅Posix才可以获得


5.ACL View

ACL是访问控制权限文件系统,在java.nio.file.attribute包中,特意针对于ACL进行了很多类的抽象:


对于上述的ACLList表中的内容,有下面的几个entry:


type是ACL的类型,有ALARM,ALLOW,AUDIT,DENY这几种;

principal实际就是UserPrinipal,

permissions是权限,映射为AclEntryPermission

flag是继承查看,AclEntryFlag,

这些属性的获取都需要有当前文件系统的ACL支持才行;


6.File Store View

File Store的视图就是把当前的文件系统当成磁盘一样看,对其大小,剩余空间有一个判断,

这些接口对接的应该是操作系统的系统调用:



7.User Defined View

还可以自定义View,自己加属性,修改,读取,并删除:


总结:

在java.io包中,虽然可以针对于文件的属性进行读取,但仅仅限制于几个常用属性,如大小等;

而在JAVA NIO2的java.nio.file.Attributes包中,使用View的机制,空前开放了对文件属性的各种读取,并且可以自定义属性,可谓是JAVA NIO2中文件IO的一大改进;


文章转载自中间件技术讨论圈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论