Java NIO 学习笔记(五)----路径、文件和管道 Path/Files/Pipe

目录:
Java NIO 学习笔记(一)----概述,Channel/Buffer
Java NIO 学习笔记(二)----聚集和分散,通道到通道
Java NIO 学习笔记(三)----Selector
Java NIO 学习笔记(四)----文件通道和网络通道
Java NIO 学习笔记(五)----路径、文件和管道 Path/Files/Pipe
Java NIO 学习笔记(六)----异步文件通道 AsynchronousFileChannel

Path 接口和 Paths 类

Path 接口是 NIO2(AIO) 的一部分,是对 NIO 的更新,Path 接口已添加到 Java 7 中,完全限定类名是 java.nio.file.Path 。

Path 实例表示文件系统中的路径。 路径可以指向文件或目录,也可以是绝对的或相对的。在某些操作系统中,不要将文件系统路径与环境变量中的 path 路径相混淆。 java.nio.file.Path 接口与路径环境 path 变量无关。

在许多方面,java.nio.file.Path 接口类似于 java.io.File 类,但存在一些细微差别。 但在许多情况下,可以使用 Path 接口替换 File 类的使用。

创建 Path 对象

可以使用名为 Paths.get() 的 Paths 类(java.nio.file.Paths)中的静态方法创建 Path 实例,get()方法是 Path 实例的工厂方法,一个示例如下:

public class PathExample { public static void main(String[] args) { // 使用绝对路径创建 Path absolutePath = Paths.get("D:\\test\\1.txt"); // 使用相对路径创建 Path relativePath = Paths.get("D:\\test", "1.txt"); System.out.println(absolutePath.equals(relativePath)); // ture } }

注意路径分隔符在 Windows 上是“\”,在 Linux 上是 “/”。

Paths 类只有2个方法:

方法 描述
static Path get(String first, String... more)   将路径字符串或在连接时形成路径字符串的字符串序列转换为路径。  
static Path (URI uri)   将给定URI转换为路径对象。  

Path 接口部分方法:

方法 描述
boolean endsWith(Path other)   测试此路径是否以给定路径结束。  
boolean equals(Object other)   取决于文件系统的实现。一般不区分大小写,有时区分。 不访问文件系统。  
Path normalize()   返回一个路径,该路径消除了冗余的名称元素,比如'.', '..'  
Path toAbsolutePath()   返回表示该路径的绝对路径的路径对象。  
File toFile()   返回表示此路径的 File 对象。  
String toString()   返回的路径字符串使用默认名称分隔符分隔路径中的名称。  
Files

NIO 文件类(java.nio.file.Files)为操作文件系统中的文件提供了几种方法,File 类与 java.nio.file.Path 类一起工作,需要了解 Path 类,然后才能使用 Files 类。

判断文件是否存在 static boolean exists(Path path, LinkOption... options)

options 参数用于指示,在文件是符号链接的情况下,如何处理该符号链接,默认是处理符号链接的。其中 LinkOption 对象是一个枚举类,定义如何处理符号链接的选项。整个类只有一个 NOFOLLOW_LINKS; 常亮,代表不跟随符号链接。

createDirectory(Path path) 创建目录 Path output = Paths.get("D:\\test\\output"); Path newDir = Files.createDirectory(output); // Files.createDirectories(output); // 这个方法可以一并创建不存在的父目录 System.out.println(output == newDir); // true System.out.println(Files.exists(output)); // true

如果创建目录成功,则返回指向新创建的路径的 Path 实例,此实例和参数是同一个实例。
如果该目录已存在,则抛出 FileAlreadyExistsException 。 如果出现其他问题,可能会抛出IOException ,例如,如果所需的新目录的父目录不存在。

复制文件

一共有 3 个复制方法:

static long copy(Path source, OutputStream out); static Path copy(Path source, Path target, CopyOption... options); static long copy(InputStream in, Path target, CopyOption... options)

其中 CopyOption 选项可以选择指定复制模式,一般是其子枚举类 StandardCopyOption 提供选项,有 3 种模式,第二个参数是可变形参,可以多个组合一起使用:

ATOMIC_MOVE :原子复制,不会被线程调度机制打断的操作;一旦开始,就一直运行到结束;

COPY_ATTRIBUTES :同时复制属性,默认是不复制属性的;

REPLACE_EXISTING :重写模式,会覆盖已存在的目的文件;

一个例子如下:

Path sourcePath = Paths.get("D:\\test\\source.txt"); // 源文件必须先存在 Path desPath = Paths.get("D:\\test\\des.txt"); // 目的文件可以不存在 Files.copy(sourcePath, desPath); // 默认情况,如果目的文件已存在则抛出异常 Files.copy(sourcePath, desPath, StandardCopyOption.REPLACE_EXISTING); // 覆盖模式

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsszwj.html