13.4 JavaNIO和NIO.2梳理

13.4 NIO和NIO.2

目录

[13.4 NIO和NIO.2](#13.4 NIO和NIO.2)

[13.4.1 引入](#13.4.1 引入)

[13.4.2 文件系统和路径](#13.4.2 文件系统和路径)

[13.4.3 FileSystem类](#13.4.3 FileSystem类)

1.创建Path实例

2.检索路径信息


13.4.1 引入

应用场景:为了增强Java I/O功能,在JDK1.4中新增了一些新的API,称为NIO(new I/O) ,NIO API是java.nio及其子包的一部分。在JDK7中又新引进了一些包,称作NIO.2 ,用来对现有技术进行补充。NIO.2的接口和类通过java.nio.file包及其子包提供

13.4.2 文件系统和路径

一个文件系统可以包含三类对象:文件、目录(也称文件夹)和符号链接(symbolic link) ,当今的大多数操作系统都支持文件和目录,并且允许目录包含子文件。处于目录树顶部的目录称作根目录。Linux/UNIX类操作系统只有一个根目录:"/",且支持符号链接Windows系统可以有多个根目录:"C:\""D:\"等,且不支持符号链接

在文件系统中,文件和目录都是通过路径表示的,路径可以是绝对的,也可以是相对的。路径通常以根节点开头。图13-1显示了一个Windows系统中目录树的结构。这里的根目录是"C:\" "D:\" "E:\"。

反斜杠"\"表示路径分隔符

绝对路径是以根元素为结点的路径。例如D:\study\user\report.txt就是绝对路径。绝对路径包含定位文件的所有信息。相对路径是不包含根元素的路径。例如,study\com\Hello.java是相对路径。只通过相对路径不能定位文件,要定位这些文件还需要另外的路径信息

注意:在Solaris OSLinux 系统中,文件系统是单根结构根节点为("/"),路径分隔符为斜线(/)

图13-1

13.4.3 FileSystem类

FileSystem表示一个文件系统,是一个抽象类,可以调用FileSystems类的getDefault()静态方法来获取当前的文件系统

FileSystem fileSystem =FileSystems.getDefault();

FileSystem类中定义了下面一些常用方法:

1.abstract Path getPath(String first,String...more):返回字符串first指定的路径对象。可选参数more用来指定后续路径

2.abstract String getSeparator():返回路径分隔符。在Windows系统中,它是"\",在UNIX/Linux系统中,它是"/"

3.abstract Iterable<Path>getRootDirectores():返回一个Iterable对象,可以用来遍历根目录

4.abstract boolean isOpen():返回文件系统是否打开

5.abstract boolean isReadOnly():返回该文件系统是否只读

13.4.4 Path对象

在Java7之前,文件和目录用File对象表示。由于使用File类存在着许多不足,因此在Java7中应使用NIO.2的java.io.file.Path接口代替File。

Path对象在文件系统中表示文件或目录。这个接口命名比较恰当,表示一个路径,可以是一个文件、一个目录、也可以是一个符号链接,还可以表示一个根目录。

正如名称所示,Path在文件系统中表示路径。一个Path对象包含构成路径的目录列表和文件命,用来检查、定位和操作文件。在Windows系统中,Path对象使用Windows语法表示(如D:\study\com\demo)

有多种方式创建和操作Path实例,可以把一个Path对象追加到另一个Path对象上,抽取Path对象部分内容、与另一个Path对象比较等

注意:在JDK7之前使用java.io.File的代码,可以使用File类的toPath()方法转换成Path对象,从而利用Path功能

1.创建Path实例

Path实例 包含确定文件或目录位置的信息 。在创建Path实例时,通常要提供一系列名称,如根元素或文件名等。一个Path可以只包含路径名和文件名。

可以使用Paths (注意复数)类的get()方法创建Path对象

1.Path p1=Paths.get("D:\\study\\com\\Hello.java")

2.Path p2=Paths.get(args[0])

3.Path p3=Paths.get(URI.create("file:///users/joe/FileTest.java"))

实际上,Paths类的get()方法时下面代码的简化形式:

Path p4=FileSystems.getDefault().getPath("D:\\study\\com\\Hello.java")
注意:创建一个Path对象并不意味着在磁盘中创建一个物理意义上的文件或目录,与Path对应的文件或目录可以不存在,为了创建文件或目录,需要使用Files类

2.检索路径信息

Path对象可以看作是一个名称序列,每一级目录可以通过索引指定。目录结构的顶层索引为0,目录结构的底层元素所以是n-1,n是总层数。例如,getName(0)方法将返回最顶层目录名称。下面代码演示了Path接口的几个方法。

Path path=Paths.get("D:\\study\\user\\report.txt")

System.out.println("toString:"+path.toString());

System.out.println("getFileName:"path.getFileName());

System.out.println("getName(0):"+path.getName(0));

System.out.println("getNameCount:"+path.getNameCount());

System.out.println("subpath(0,2):"+path.subpath(0,2));

System.out.println("getParent:"+ path.getParent());

System.out.println("getRoot:"+path.getRoot());

上述代码的输出结果如下,

toString:D:\study\user\report.txt

getFileName:report.txt

getName(0):study

getNameCount:3

subpath(0,2):study\user

getParent:D:\study\user

getRoot:D:

相关推荐
直视太阳1 小时前
springboot+easyexcel实现下载excels模板下拉选择
java·spring boot·后端
Code成立1 小时前
《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》第2章 Java内存区域与内存溢出异常
java·jvm·jvm内存模型·jvm内存区域
一 乐1 小时前
实验室预约|实验室预约小程序|基于Java+vue微信小程序的实验室预约管理系统设计与实现(源码+数据库+文档)
java·数据库·微信小程序·小程序·毕业设计·论文·实验室预约小程序
程序媛学姐1 小时前
SpringRabbitMQ消息模型:交换机类型与绑定关系
java·开发语言·spring
努力努力再努力wz2 小时前
【c++深入系列】:类与对象详解(中)
java·c语言·开发语言·c++·redis
兰亭序咖啡2 小时前
学透Spring Boot — 009. Spring Boot的四种 Http 客户端
java·spring boot·后端
独行soc2 小时前
2025年渗透测试面试题总结- 某四字大厂面试复盘扩展 一面(题目+回答)
java·数据库·python·安全·面试·职场和发展·汽车
早上好啊! 树哥2 小时前
常见的文件加密方式之【异或加密】,代入原理看例子,帮助更好的理解。
android·java·junit
兰亭序咖啡2 小时前
学透Spring Boot — 018. 优雅支持多种响应格式
java·spring boot·后端
小雨凉如水2 小时前
docker 常用命令
java·docker·eureka