Java基础知识之文件操作(三)——NIO获取文件属性

来源:互联网 发布:linux cpu核心使用率 编辑:程序博客网 时间:2024/06/04 17:50

1.NIO简单介绍

JDK1.4开始,Java提供一系列改进的输入/输出处理的新功能,被称为New IO(NIO),在java.nio包下。

Channel(通道)和 Buffer(缓冲)是NIO中两个核心对象。

JDK1.7对原有的NIO进行了改进,被称为NIO.2。

NIO.2提供了全面的文件IO和文件系统访问支持,基于异步Channel的IO。

NIO.2中的操作文件工具类Files,路径工具类Paths,获取Path接口对象,下面工具类的简单使用

复制文件

//复制文件Files.copy(Paths.get("G:/json.txt"), new FileOutputStream("G:/test.txt"));
判断文件是否为隐藏文件

//判断文件是否为隐藏文件(判断文件,而非文件夹)System.out.println(Files.isHidden(Paths.get("G:/json.txt")));

判断文件是否可读可写

//是否可写System.out.println(Files.isWritable(path));//是否可读System.out.println(Files.isReadable(path));

得到文件的大小

//得到文件的大小(字节)System.out.println(Files.size(Paths.get("G:/JavaApi/jdk-8u111-docs-all.zip")));

读取文件的所有行

//读取文件所有行,并制定读取编码List<String> lines = Files.readAllLines(Paths.get("G:/json.txt"),Charset.forName("gbk"));

将多行字符串写入指定文件

//将多行字符串写入指定文件夹,并指定编码Files.write(Paths.get("G:/test.txt"), lines, Charset.forName("gbk"));

得到系统盘的空间

FileStore dStore = Files.getFileStore(Paths.get("E:"));//D盘总空间System.out.println(dStore.getTotalSpace());//D盘可用空间System.out.println(dStore.getUsableSpace());

2.FileVisitor遍历文件和目录

// 遍历G:\KuGou盘目录下所有的文件和子目录Files.walkFileTree(Paths.get("G:", "KuGou"), new SimpleFileVisitor<Path>() {// 访问目录时使用发该方法@Overridepublic FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {// 继续遍历 Continue继续return FileVisitResult.CONTINUE;}// 访问文件使用该方法@Overridepublic FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {if (file.toString().endsWith(".mp3")) {System.out.println(file);//如果找到一个就返回则 添加以下代码  TERMINATE 结束//return FileVisitResult.TERMINATE;}return FileVisitResult.CONTINUE;}});}

3.WatchService监控文件变化

//获取文件系统的WatchService对象WatchService watchService = FileSystems.getDefault().newWatchService();//为C:盘根路径注册监听Paths.get("C:/").register(watchService//监听创建操作,StandardWatchEventKinds.ENTRY_CREATE//监听删除操作,StandardWatchEventKinds.ENTRY_DELETE//监听修改操作,StandardWatchEventKinds.ENTRY_MODIFY);//死循环一直监听while(true) {//一直等待,直到获取下一个文件变化事件WatchKey key = watchService.take();//遍历监控获得的事件列表for (WatchEvent<?> event : key.pollEvents()) {//event.context()返回触发事件的文件或目录System.out.println(event.context() + "发生了" + event.kind()+ "事件");}//重新设置WatchKeyboolean valid = key.reset();//如果设置失败则退出监听if (!valid) {break;}}

4.访问文件属性
java.nio.file.attribute包下提供了工具类,可以读取、修改文件属性

XxxAttributeView: 代表文件的属性的“视图”

XxxAttributes:代表文件属性的”集合“,一般通过XxxAttributeView对象获取XxxAttributes。

得到文件的基本信息

//获得将要操作的文件Path path = Paths.get("G:/test.txt");//获取访问基本属性的BasicFileAttributeViewBasicFileAttributeView basicView = Files.getFileAttributeView(path, BasicFileAttributeView.class);//获取访问基本属性的BasucFileAttributesBasicFileAttributes basicAttribs = basicView.readAttributes();//访问文件的基本属性//创建时间System.out.println(new Date(basicAttribs.creationTime().toMillis()));//最后访问时间System.out.println(new Date(basicAttribs.lastAccessTime().toMillis()));//最后修改时间System.out.println(new Date(basicAttribs.lastModifiedTime().toMillis()));//文件大小System.out.println(basicAttribs.size());

获取文件所属的用户名

//获取访问文件属主信息的FileOwnerAttributeViewFileOwnerAttributeView onerView = Files.getFileAttributeView(path, FileOwnerAttributeView.class);//获取文件所属的用户System.out.println(onerView.getOwner());//获取系统中 guest对应的用户 (保证电脑创建有多个用户)UserPrincipal user = FileSystems.getDefault().getUserPrincipalLookupService().lookupPrincipalByName("guset");//修改用户onerView.setOwner(user);

设置文件属性(隐藏,只读)

// 获取访问DOS属性的DosFileAttributeViewDosFileAttributeView dosView = Files.getFileAttributeView(path, DosFileAttributeView.class);// 可以加以判断,Files.isHidden(path)是否已经隐藏// 将文件设置为隐藏dosView.setHidden(true);// 设置为只读dosView.setReadOnly(true);

1 0