package com.sq;
import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
import org.junit.Test;
/**
* 1.jdk 7.0时,引入了 Path、Paths、Files 三各类 2.此三各类声明在:java.nio.file 包下。 3.Path 可以看作是 java.io.File 类的升级版本。也可以表示文件或文件目录,与平台无关
* 4.如何实例化 Path:使用 Paths。 static Path get(String first,String ... more):用于将多个字符串连成路径 static Path get(URI uri):返回指定 uri
* 对应的 Path 路径
*
*/
public class PathTest {
// 如何使用 Paths 实例化 Path
@Test
public void test1() {
// new File(String file
Path path1 = Paths.get("d:\\nio\\hello.txt");
// new File(String file
Path path2 = Paths.get("d:\\", "nio\\hello.txt");
System.out.println(path1);
System.out.println(path2);
Path path3 = Paths.get("d:\\", "nio");
System.out.println(path3);
}
// Path 中常用的方法
@Test
public void test2() {
Path path1 = Paths.get("d:\\", "nio\\nio1\\nio2\\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("d:\\nio"));
// 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() + "~");
System.out.println(path2.getFileName() + "~");
// int getNameCount();//返回 Path 根目录后面元素的数量
// 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("d:\\", "nio");
Path path4 = Paths.get("nioo\\hi.txt");
path3 = path3.resolve(path4);
System.out.println(path3);
// File toFile();//将 Path 转换为 File 类的对象
// Path ---> File 的转换
File file = path1.toFile();
// File ---> Path 的转换
Path newPath = file.toPath();
}
}
package com.sq;
import java.io.IOException;
import java.nio.file.*;
import org.junit.Test;
/**
* Files 工具类的使用:操作文件或目录的工具类
*
*/
public class FilesTest {
@Test
public void test1() throws IOException {
Path path1 = Paths.get("d:\\nio", "hello.txt");
Path path2 = Paths.get("atguigu.txt");
// Path copy(Path src,Path dest, CopyOption ... how); //文件的复制
// 要想复制成功,要求 path1 对应的物理上的文件存在。path1 对应的文件没有要求。
Files.copy(path1, path2, StandardCopyOption.REPLACE_EXISTING);
// Path createDirectory(Path path,FileAttribute<?> ... attr);//创建一个目录
// 要想执行成功,要求 path 对应的物理上的文件目录不存在。一旦存在,抛出异常。
Path path3 = Paths.get("d:\\nio\\nio1");
// Files.createDirectory(path3);
// Path createFile(Path path, FileAttribute<?> ... arr);// 创建一个文件
// 要想执行成功,要求 path 对应的物理上的文件不存在。一旦存在,抛出异常。
Path path4 = Paths.get("d:\\nio\\hi.txt");
// Files.createFile(path4);
// void delete(Path path);//删除一个文件/目录,如果不存在,执行报错
Files.delete(path4);
// void deleteIfExists(Path path);// Path 对应的文件/目录如果存在,执行删除,如果
Files.deleteIfExists(path3);
// Path move(Path src,Path dest, CopyOption...how);//将 src 移动到 dest 位置
// 要想执行成功,src 对应的物理上的文件需要存在,dest 对应的文件没有要求。
// File.move(path1,path2,StandardCopyOption.ATOMIC_MOVE);
// long size(Path path);//返回 path 指定文件的大小
long size = Files.size(path2);
System.out.println(size);
}
@Test
public void test2() throws IOException {
Path path1 = Paths.get("d:\\nio", "hello.txt");
Path path2 = Paths.get("atguigu.txt");
// boolean exists(Path path,LinkOptin ... opts);// 判断文件是否存在
System.out.println(Files.exists(path2, LinkOption.NOFOLLOW_LINKS));
// boolean isDirectory(Path path,LinkOption ... opts);// 判断是否是目录
// 不要求次 path 对应的物理文件存在。
System.out.println(Files.isDirectory(path1, LinkOption.NOFOLLOW_LINKS));
// boolean isregularFile(Path path,LinkOption ... opts);// 判断是否是文件
// boolean isHidden(Path path);// 判断是否隐藏文件
// 要求此 path 对应的物理上的文件需要存在。才可判断是否隐藏。否则,抛异常。
// System.out.println(Files.isDirectory(path1));
// boolean isReadable(Path path);// 判断文件是否可读
System.out.println(Files.isReadable(path1));
// boolean isWritable(Path path);// 判断文件是否可写
System.out.println(Files.isWritable(path1));
// boolean notExists(Path path,LinkOption ... opts);// 判断文件是否不存在
System.out.println(Files.notExists(path1, LinkOption.NOFOLLOW_LINKS));
}
}