13.4 JavaNIO和NIO.2梳理

13.4  NIO和NIO.2

目录

13.4  NIO和NIO.2

13.4.1  引入

13.4.2  文件系统和路径

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:

  • 25
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值