《程序员修炼之道》-读书笔记三-NIO文件操作
2.3. 处理目录和目录树
2.3.1 在目录中查找文件:
在Java7新加入的 java.nio.file.DirectoryStream接口和它的实现类提供了很多功能
Path dir = Paths.get("D:\\BaiduNetdiskDownload");
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, "*.rar")) {
for (Path entry : stream) {
System.out.println(entry.getFileName());
}
} catch (IOException e) {
e.printStackTrace();
}
2.3.2 遍历目录树
遍历目录树需要掌握一些接口及其实现的细节。其中的关键方法是:
Files.walkFileTree(Path start, FileVisitor<? super Path> visitor)
列出子目录下所有以.java结尾的文件
public class Find {
public static void main(String[] args) throws IOException {
Path startinfDir = Paths.get("D:\\work");
Files.walkFileTree(startinfDir, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
if (file.toString().endsWith(".java")) {
System.out.println(file.getFileName());
}
return FileVisitResult.CONTINUE;
}
});
}
}
SimpleFileVisitor<T>是FileVisitor<? super Path>的默认实现类,我们要完成的大部分操作,比如遍历目录,只需要重写visitFile(Path file, BasicFileAttributes attrs)方法
2.4 NIO.2的文件系统I/O
2.4.1 创建和删除文件
只需要调用Files类里的辅助方法,就可以很容易的创建和删除文件.
Path target = Paths.get("D:\\Backup\\MyStuff.txt");
Files.createFile(target);
// Files.delete(target);
2.4.2 复制和移动文件
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
Path source = Paths.get("D:\\Backup\\MyStuff.txt");
Path target = Paths.get("D:\\test.txt");
Files.copy(source, target, REPLACE_EXISTING);
// Files.move(source, target, REPLACE_EXISTING);