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:

相关推荐
皮皮林55111 小时前
IDEA 源码阅读利器,你居然还不会?
java·intellij idea
卡尔特斯16 小时前
Android Kotlin 项目代理配置【详细步骤(可选)】
android·java·kotlin
白鲸开源16 小时前
Ubuntu 22 下 DolphinScheduler 3.x 伪集群部署实录
java·ubuntu·开源
ytadpole16 小时前
Java 25 新特性 更简洁、更高效、更现代
java·后端
纪莫16 小时前
A公司一面:类加载的过程是怎么样的? 双亲委派的优点和缺点? 产生fullGC的情况有哪些? spring的动态代理有哪些?区别是什么? 如何排查CPU使用率过高?
java·java面试⑧股
JavaGuide17 小时前
JDK 25(长期支持版) 发布,新特性解读!
java·后端
用户37215742613517 小时前
Java 轻松批量替换 Word 文档文字内容
java
白鲸开源17 小时前
教你数分钟内创建并运行一个 DolphinScheduler Workflow!
java
Java中文社群18 小时前
有点意思!Java8后最有用新特性排行榜!
java·后端·面试
代码匠心18 小时前
从零开始学Flink:数据源
java·大数据·后端·flink