用到的方法
方法名 | 方法作用 |
---|---|
isFile() | 判断对象是不是文件 |
getName() | 获取文件名 |
listFiles() | 获取文件子目录File集合 |
今天正在学习IO流,首先利用File文件的listFiles()方法获取File数组,然后foreach遍历打印;
代码如下:
String pathname = "e:" + File.separator + "a";
File file = new File(pathname);
File[] fileArr = file.listFiles();
for (File file2 : fileArr) {
System.out.println(file2);
}
结果:
e:\a\b.txt
e:\a\新建文件夹
e:\a\新建文件夹 (2)
我们发现用foreach只能打印一级目录,那如何打印子目录的子目录呢?那我们需要判断它是不是文件夹,那可是我们又不知道要写多少次,所以想到利用递归
代码:
package io;
import java.io.File;
public class Test5 {
public static void main(String[] args) {
File[] root = File.listRoots();
String pathname = "e:" + File.separator + "a";
File file = new File(pathname);
bmli(file);
}
public static void bmli(File file) {
File[] fileArr = file.listFiles();
for (File file2 : fileArr) {
System.out.println(file2.getName());
if (!file2.isFile()) {
bmli(file2);
}
}
}
}
结果:
b.txt
新建文件夹
3
3.txt
新建文本文档.txt
新建文件夹 (2)
恩,利用递归就可以遍历了,不过不是一级目录连在一起,顺序有点乱。
回去想一想,想到了再写怎么遍历出有顺序的。
嗯,改了一点点就可以了
package io;
import java.io.File;
public class Test5 {
public static void main(String[] args) {
File[] root = File.listRoots();
String pathname = "e:" + File.separator + "a";
File file = new File(pathname);
bmli(file);
}
public static void bmli(File file) {
System.out.println("********************");
File[] fileArr = file.listFiles();
for (File file2 : fileArr) {
System.out.println(file2.getName());
}
for (File file2 : fileArr) {
if (!file2.isFile()) {
bmli(file2);
}
}
}
}
结果:
b.txt
新建文件夹
新建文件夹 (2)
3
新建文本文档.txt
3.txt