分别使用Java老IO和新IO实现文件夹遍历
本文是原创文章,转载请注明出处哦。
老IO遍历
新IO遍历
例如下面图片所示的文件目录结构:
老IO遍历
使用Java老IO的API遍历文件夹及其子文件夹下的内容,主要用到递归算法,代码如下:
public static void oldIo(String pathStr) {
File file = new File(pathStr);
if (file.isDirectory()) {
System.out.println("Directory:" + file.getName());
for (String subFileStr : file.list()) {
oldIo(pathStr + "/" + subFileStr);
}
} else {
System.out.println("File:" + file.getName() + "|size:" + file.length());
}
}
新IO遍历
使用Java7新增的NIO.2的API遍历,代码如下:
public static void newIo(String pathStr) throws Exception {
Path root = Paths.get(pathStr);
Files.walkFileTree(root, new SimpleFileVisitor() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
System.out.println("Directory:" + dir.getFileName());
return super.preVisitDirectory(dir, attrs);
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
System.out.println("File:" + file.getFileName() + "|size:" + attrs.size());
return super.visitFile(file, attrs);
}
});
}
测试验证
编写main方法运行
public static void main(String[] args) throws Exception {
String pathStr = "F:/test";
System.out.println("===老IO遍历===");
oldIo(pathStr);
System.out.println("===新IO遍历===");
newIo(pathStr);
}
运行结果: =====老IO遍历===== Directory:test Directory:d1 Directory:d3 Directory:d5 File:f7.txt|size:0 File:f6.txt|size:0 Directory:d4 File:f3.txt|size:38 File:f4.txt|size:62 Directory:d2 File:f5.txt|size:0 File:f1.txt|size:40 File:f2.txt|size:0 =====新IO遍历===== Directory:test Directory:d1 Directory:d3 Directory:d5 File:f7.txt|size:0 File:f6.txt|size:0 Directory:d4 File:f3.txt|size:38 File:f4.txt|size:62 Directory:d2 File:f5.txt|size:0 File:f1.txt|size:40 File:f2.txt|size:0