分别使用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<Path>() {
@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