文件属性相关——NIO.2

一、NIO.2专门在java.nio.file包下增加了一个attribute包(即java.nio.file.attribute),里面提供了大量的文件属性访问及修改API,基本上可以全面使用OS的文件系统功能

Java按照功能和类别将文件属性分成了好几种,而最顶层的是FileAttributeView,这是个接口,表示所有文件属性视图的父视图,而其低下则派生了很多各种类型的文件属性视图:这里介绍几个最常用的

  1. BasicFileAttributeView:基础文件属性,包括文件修改时间、创建时间、最后修改时间、文件大小、是否为目录、是否为快捷方式等,这也是最最常用的;
  2. FileOwnerAttributeView:文件主人的相关属性,其只有两个功能,一个是获取当前文件的所属人,另一个是修改当前文件的所属人;
  3. DosFileAttributeView:获取和修改文件的Dos属性(Windows中的特性),比如检查文件是否为隐藏、是否是归档文件,其使用程度仅次于BasicFileAttributeView
  4. UserDefinedFileAttributeView用户自定义文件属性,一般OS在开发层面都允许用户自定义文件的一些属性,自定义属性必然使用键值对来表示,键是属性的名称(需要自定义),而值则是属性的值(属性的值可以是任意类型的,因此需要用二进制字节来保存,读取和保存时需要用到ByteBuffer)

二、获取对象的方式:

XxxXxxAttributeView xxxView = Files.getFileAttributeView(path, XxxXxxAttributeView.class);

XxxXxxAttributeView ——派生类,例如自定义文件属性,UserDefineFileAttributeView

path——目标文件,类型为java.nio.file.Path,获取方式:Path path = Paths.get(fileUrl);

三、这边主要着重介绍自定义属性的用法——UserDefinedFileAttributeView

主要采用键值对的方式来存储,KEY:String类型;VALUE:二进制节码。(这样可以表示任意类型数据)

主要有以下几个方法:

a、String name()——获取该属性视图的名字,一般都返回user,目前不知道具体的用途

b、List<String> list()——返回该属性视图中自定义属性的KEY值列表

c、int size(String name)——根据name(即自定义属性KEY值)查找并返回该自定义属性的VALUE值的长度

d、int read(String name, ByteBuffer dst)——读取键值对,即将name(即自定义属性KEY值)对应的属性值读取到ByteBuffer的对象中,返回的int是读取到的字节的个数

e、int write(String name, ByteBuffer src)——写入一个键值对,KEY为name,VALUE为src,返回的int是写入的字节的个数

四、自定义属性示例

import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.UserDefinedFileAttributeView;
import java.util.List;

public class DefineFileUserAttribute {
    public static void main(String[] args) {
        Path path = Paths.get("D:\\index1.html");
        UserDefinedFileAttributeView defindView = Files.getFileAttributeView(path,
                UserDefinedFileAttributeView.class);
        try {
            // 写入一个键值对
            defindView.write("userName", Charset.defaultCharset().encode("zhang.san"));
            // 读取里面的键值对
            List<String> attrNames = defindView.list();
            for (String name: attrNames) {
                // 根据name获取该KEY对应的VALUE的字节数,定义ByteBuffer长度
                ByteBuffer bb = ByteBuffer.allocate(defindView.size(name));
                // 读取值,写入到ByteBuffer对象中
                defindView.read(name, bb);
                bb.flip();
                String value = Charset.defaultCharset().decode(bb).toString();
                System.out.println(name+":"+value);
            }
        } catch (IOException e) {
            System.err.println(e);
        }
    }
}

五、附带此处ByteBuffer用法说明

1、生成指定size的ByteBuffer——ByteBuffer bb = ByteBuffer.allocate(int size)

2、直接将String对象转成ByteBuffer——Charset.defaultCharset().encode(String str)

3、将ByteBuffer对象转为String对象——Charset.defaultCharset().decode(ByteBuffer bb).toString()

4、结束——bb.flip()

文档内容参考至:

API:https://docs.oracle.com/javase/7/docs/api/java/nio/file/attribute/UserDefinedFileAttributeView.html

转载:https://blog.csdn.net/lirx_tech/article/details/51428238

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值