Java NIO (New IO,Non-Blocking IO) 是从 Java 1.4 版木开始引入的一套新的IO API,可以替代标准的 Java IO APi。NIO 与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的(IO是面向流的)、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。
Java API 中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。
早期的 Java 只提供了一个 File 类来访问文件系统,但 File 类的功能比较有限,所提供的方法性能也不高。而且,大多数方法在出错时仅返回失败,并不会提供异常信息。
NIO.2 为了弥补这种不足,引入了 Path 接口,代表一个平台无关的平台路径,描述了目录结构中文件的位置。Path 可以看成是 File类 的升级版木,实际引用的资源也可以不存在。
同时,NIO.2 在 java.nio.file 包下还提供了 Files、Paths 工具类,Files 包含了大量静态的工具方法来操作文件;Paths 则包含了两个返回 Path 的静态工厂方法。
PatchTest.java
package com.klvchen.java; import org.junit.Test; import java.io.File; import java.nio.file.Path; import java.nio.file.Paths; public class PatchTest { //如何使用 Paths 实例化 Path @Test public void test1(){ Path path1 = Paths.get("G:\\tmp\\nio\\hello.txt"); Path path2 = Paths.get("G:\\", "nio\\hello.txt"); System.out.println(path1); System.out.println(path2); Path path3 = Paths.get("G:\\", "nio"); System.out.println(path3); } @Test public void test2(){ Path path1 = Paths.get("G:\\", "tmp\\nio\\hello.txt"); Path path2 = Paths.get("hello.txt"); // String toString():返回调用Path对象的字符串表示形式 System.out.println(path1); // boolean startsWith(String path):判断是否以 path路径开始 System.out.println(path1.startsWith("G:\\tmp")); // boolean endsWith(String path): 判断是否以 path 路径结束 System.out.println(path1.endsWith("hello.txt")); // boolean isAbsolute():判断是否是绝对路径 System.out.println(path1.isAbsolute() + "~"); System.out.println(path2.isAbsolute() + "~"); // Path getParent() :返回Path对象包含整个路径,不包含Path对象指定的文件路径 System.out.println(path1.getParent()); System.out.println(path2.getParent()); // Path getRoot() :返回调用Path对象的根路径 System.out.println(path1.getRoot()); System.out.println(path2.getRoot()); // Path getFileName() :返回与调用 Path对象关联的文件名 System.out.println(path1.getFileName() + "~"); // Path getName(int idx) :返回指定索引位置 idx 的路径名称 for (int i = 0; i < path1.getNameCount(); i++) { System.out.println(path1.getName(i) + "*****"); } // Path toAbsolutePath():作为绝对路径返回调用Path对象 System.out.println(path1.toAbsolutePath()); System.out.println(path2.toAbsolutePath()); // Path resolve(Path p):合并两个路径,返回合并后的路径对应的Path对象 Path path3 = Paths.get("G:\\", "tmp"); Path path4 = Paths.get("nioo\\hi.txt"); path3 = path3.resolve(path4); System.out.println(path3); // File toFile(): 将 Path 转化为File类的对象 File file = path1.toFile(); // Path ---> File的转换 Path newPath = file.toPath(); //File ---> Path的转换 } }
FileUtilsTest.java
package com.klvchen.java; import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; public class FileUtilsTest { public static void main(String[] args) { File srcFile = new File("day10\\1.png"); File destFile = new File("day10\\3.png"); try { FileUtils.copyFile(srcFile, destFile); } catch (IOException e) { e.printStackTrace(); } } }