Java7中NIO.2中文件IO的sample

Java7对原有的NIO进行了重大改进,叫NIO.2。= =

其中之一就是提供了全面的文件IO和文件系统访问支持,新增了java.nio.file包及各个子包。

NIO.2引入了Path接口,Path接口代表一个平台无关的平台路径;还提供了Files、Paths两个工具类,Files包含了大量静态的工具方法来操作文件,Paths则包含了两个返回Path的静态工厂方法。

这边我记录下以上几个的用法sample,以后用得着。

  • Path接口的功能和用法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
* Path接口的功能和用法
*/

//以当前路径创建Path对象
Path path = Paths.get(".");
System.out.println("Paths.get(\".\"):" + path);
System.out.println("path的路径数量:" + path.getNameCount());
System.out.println("path的根路径:" + path.getRoot());
System.out.println("path的绝对路径:" + path.toAbsolutePath());
System.out.println("AbsolutePath的根路径:" + path.toAbsolutePath().getRoot());
System.out.println("AbsolutePath的路径数量:" + path.toAbsolutePath().getNameCount());
System.out.println("path.toAbsolutePath().getName(3):" + path.toAbsolutePath().getName(3));

//以多个string构建path对象
//相当于e:\Workspace\IDEA,超方便有木有
Path path2 = Paths.get("e:", "Workspace", "IDEA");
System.out.println("Paths.get(\"e:\", \"Workspace\", \"IDEA\"):" + path2);
  • Files类的用法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* Files类的用法
*/

Path path3 = Paths.get("pwd.txt");
//复制文件
Files.copy(path3, new FileOutputStream("copy.txt"));
//判断是否为隐藏文件
System.out.println("pwd.txt是否为隐藏文件:" + Files.isHidden(path3));
//一次性读取文件的所有行
List<String> lines = Files.readAllLines(path3, Charset.forName("gbk"));
System.out.println(lines);
//判断指定文件的大小
System.out.println("pwd.txt大小为:" + Files.size(path3));
//将多个字符串内容写入指定文件中
List<String> poem = new ArrayList<String>();
poem.add("举头望明月");
poem.add("低头思故乡");
Files.write(Paths.get("poem.txt"), poem, Charset.forName("utf-8"));
//判断C盘的总空间、可用空间
FileStore fileStore = Files.getFileStore(Paths.get("C:"));
System.out.println("C盘总空间:" + fileStore.getTotalSpace());
System.out.println("C盘可用空间:" + fileStore.getUsableSpace());

Files工具类真心简单,原本需要通过IO操作才能完成的功能,现在Files类只要一个工具方法即可。

  • 使用FileVisitor遍历文件和子目录

在之前的java版本中,遍历指定目录下的所有文件和子目录只能使用递归。有了Files工具类的帮助,遍历文件和子目录就方便的多了。Files类主要使用walkFileTree()来遍历。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
* 使用FileVisitor遍历文件和子目录
*/

//遍历E:\Workspace\AndroidStudio目录下的所有文件和子目录
Files.walkFileTree(Paths.get("E:", "Workspace", "AndroidStudio"), new SimpleFileVisitor<Path>() {
//访问文件时触发
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
System.out.println("正在访问" + file + "文件");
//找到了MainActivity.java
if (file.endsWith("MainActivity.java")) {
System.out.println("---已经找到目标文件---");
//返回终止访问的后续行为
return FileVisitResult.TERMINATE;
}
//返回继续访问的后续行为
return FileVisitResult.CONTINUE;
}

//开始访问文件时触发
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
System.out.println("---开始访问" + dir + "路径---");
return FileVisitResult.CONTINUE;
}
});

资料来自《疯狂JAVA讲义》