NIO.2中Path,Paths,Files类的使用

Java NIO

Java NIO概述

  • Java NIO(New IO(新io),Non-Blocking IO(非阻塞的io))是从Java 1.4版本开始引入的一套新的IO API,可以替代标准的Java IO APINIO与原来的IO有同样的作用和目的的,但是使用的方式完全不同,NIO支持面向缓冲区的(IO是面向流的),基于通道的IO操作。NIO将以更高效的方式进行文件的读取操作

  • Java API中提供两套NIO一套是针对标准输入输出NIO另一套就是网络编程NIO

    --->java.nio.channels.Channel(通道)

    ​ --->FileChannel:处理本地文件

    ​ --->SocketChannel:TCP网络编程的客户端的Channel

    ​ --->ServerSocketChannel:TCP网络编程的服务器端Channel

    ​ --->DatagramChannel:UDP网络编程中发送端和接收端的Channel

NIO.2

  • 随着JDK 7 的发布,Java对NIO进行极大的扩展,增强了对文件处理和文件系统特性的支持,以至于我们称他们为NIO.2

    因为NIO提供的一些功能,NIO已经称为文件处理中越来越重要的部分。

NIO.2中Path,paths,Files类的使用
  • 早期的Java只提供一个file类来访问文件系统,但file类的功能比较有限,所提供的方法性能也不高。而且,大多数方法出错时仅返回失败,并不会提供异常信息

  • NIO.2为了弥补这种不足,引入Path接口,代表一个平台无关的平台路径,描述了目录结构文件的位置。Path可以看成file类的升级版本,实际引用的资源也可以不存在

  • 在以前IO操作都是这样写的:

    import java.io.File;
    File file = new File("index.html");
    
  • 但是在Java7中,我们可以这样写:

    import java.nio.file.Path;
    import java.nio.file.Paths;
    Path path = Paths("index.html");
    
  • 同时,NIO.2在java.nio.file 包下提供了Files,Paths工具类,Files包含了大量静态的工具方法来操作文件:Paths则包含了两个返回Path的静态工厂方法。

  • Paths类体提供的静态get()方法来获取Path对象:

    static Path get(String first,String ... more); //用于将多个字符串串联成路径
    Static Path get(URL uri); //返回指定的uri对应的Path路径
    
Path接口
Path常用方法
String toString();	//返回调用Path对象的字符串表示形式
boolean startsWith(String path);	//判断是否以path路径开始
boolean endsWith(Strng path);	//判断是否以path路径结束
boolean isAbsolute();	//判断是否是绝对路径
Path getParent();	//返回Path对象包含整个路径,不包含Path对象指定的文件路径
Path getRoot();	//返回调用Path对象的根路径
Path getFileName();	//返回与调用Path对象关联的文件名
int getNameCount();	//返回Path根目录后面元素的数量
Path getName(int idx);	//返回指定索引位置idx的路径名称
Path toAbsolutePath();	//作为绝对路径返回调用Path对象
Path resolve(Path p);	//合并两个路径,返回合并后的路径对应的Path对象
File toFile();	//将Path转换为File类对象
Files
  • java.nio.file.Files 用于操作文件或目录的工具类。

  • Files常用方法:

    Path copy(Path src,Path dest,CopyOption ... how);	//文件的赋值
    Path createDirectory(Path path,FileAttribute<?> ... attr);	//创建一个目录
    Path createFile(Path path,FileAttribute<?> ... arr);	//创建一个文件
    void delete(Path path);	//删除一个文件/目录,如果不存在,执行报错
    void deleteIfExists(Path path);	//Path对应的文件/目录如果存在,执行删除
    Path move(Path src,Path dest,CopyOption ... how);	//将src移动到dest位置
    long size(Path path);	//返回path指定文件的大小
    

    Files常用方法:用于判断

    boolean exists(Path path,LinkOption ... opts);	//判断文件是否存在
    boolean isDirectory(Path path,LinkOption ... opts);	//判断是否是目录
    boolean isRegularFile(Path path,LinkOption ... opts);	//判断是否是文件
    boolean isHidden(Path path);	//判断是否是隐藏文件
    boolean isReadable(Path path);	//判断文件是否可读
    boolean isWritable(Path path) ;	//判断文件是否可写
    boolean notExists(Path path,LinkOption ... opts);	//判断文件是否不存在
    

    Files常用方法:用于操作内容

    SeekableByteChannel newByteChannel(Path path,OpenOption ... how);	//获取与指定文件的连接,how指定打开方式。
    DirectoryStream<Path> new DirectoryStream(Path path);	//打开path指定的目录
    InputStream newInputStream(Path path,OpenOption ... how);	//获取InputStream对象
    OutputStream newOutputStream(Path path,OpenOption ... how);	//获取OutputStream对象
    
posted @ 2021-01-12 12:30  MikiKawai  阅读(224)  评论(0编辑  收藏  举报