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:

相关推荐
爱上语文16 分钟前
Springboot的三层架构
java·开发语言·spring boot·后端·spring
serve the people20 分钟前
springboot 单独新建一个文件实时写数据,当文件大于100M时按照日期时间做文件名进行归档
java·spring boot·后端
qmx_071 小时前
HTB-Jerry(tomcat war文件、msfvenom)
java·web安全·网络安全·tomcat
为风而战1 小时前
IIS+Ngnix+Tomcat 部署网站 用IIS实现反向代理
java·tomcat
技术无疆3 小时前
快速开发与维护:探索 AndroidAnnotations
android·java·android studio·android-studio·androidx·代码注入
架构文摘JGWZ6 小时前
Java 23 的12 个新特性!!
java·开发语言·学习
拾光师7 小时前
spring获取当前request
java·后端·spring
aPurpleBerry7 小时前
neo4j安装启动教程+对应的jdk配置
java·neo4j
我是苏苏7 小时前
Web开发:ABP框架2——入门级别的增删改查Demo
java·开发语言
xujinwei_gingko7 小时前
Spring IOC容器Bean对象管理-Java Config方式
java·spring