Java7 对原有的 NIO 进行了重大改进,叫 NIO.2。
其中之一就是提供了全面的文件 IO 和文件系统访问支持,新增了 java.nio.file 包及各个子包。
NIO.2 引入了 Path 接口,Path 接口代表一个平台无关的平台路径;还提供了 Files、Paths 两个工具类,Files 包含了大量静态的工具方法来操作文件,Paths 则包含了两个返回 Path 的静态工厂方法。
这边我记录下以上几个的用法 sample,以后用得着。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
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));
Path path2 = Paths.get("e:", "Workspace", "IDEA"); System.out.println("Paths.get(\"e:\", \"Workspace\", \"IDEA\"):" + path2);
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
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"));
FileStore fileStore = Files.getFileStore(Paths.get("C:")); System.out.println("C盘总空间:" + fileStore.getTotalSpace()); System.out.println("C盘可用空间:" + fileStore.getUsableSpace());
|
Files 工具类真心简单,原本需要通过 IO 操作才能完成的功能,现在 Files 类只要一个工具方法即可。
在之前的 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
|
Files.walkFileTree(Paths.get("E:", "Workspace", "AndroidStudio"), new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { System.out.println("正在访问" + file + "文件"); 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 讲义》