Java NIO 概述
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的转换
}
}
导入第三方包:commons-io-2.5.jar
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();
}
}
}