File类提供了list和listFiles方法用于获取指定目录下的文件和目录。
● File[] listFiles ()
该方法用于返回某个目录下所有文件和目录的File对象,返回的是File对象数组。
● String[] list ()
该方法用于返回某个目录下的所有文件和目录的文件名,返回的是String数组。
案例1:应用递归方法遍历指定目录下的所有子目录和文件。
在file包下新建TraverseFile类。代码如下:
package file;
import java.io.File;
/**
* @ClassName: TraverseFile
* @Description: 输入与输出(遍历目录和文件)案例1
* @author 编程训练营
* @date
*
*/
public class TraverseFile {
public static void listFiles(File dir) {
// 判断当前文件或目录是否存在
if (dir.exists()) {
// 如果是目录
if (dir.isDirectory()) {
// 打印当前目录的路径
System.out.println(dir);
// 获取该目录下的所有文件和目录组成的File数组
File[] files = dir.listFiles();
// 递归遍历每一个子文件
for (File file : files) {
listFiles(file);
}
}
// 如果是文件,则打印该文件路径及名称
else {
System.out.println(dir);
}
}
}
}TraverseFile类用到了递归算法,递归算法就是在方法内部再次调用自身方法,就形成了递归调用。例如TraverseFile类的listFiles()方法就是递归算法,在listFiles()方法内部又调用了listFiles()方法。使用递归算法可以简化和替代循环。
在file包下新建TraverseFileTest类,测试TraverseFile类。代码如下:
package file;
import java.io.File;
/**
* @ClassName: TraverseFileTest
* @Description: 输入与输出(遍历目录和文件)案例2
* @author 编程训练营
* @date
*
*/
public class TraverseFileTest {
/**
* @Title: main
* @Description: Java程序入口main方法
* @param @param args 参数
* @return void 返回类型
* @throws
*/
public static void main(String[] args) {
// 遍历指定的目录
File file = new File("c:\\test2");
TraverseFile.listFiles(file);
}
}TraverseFile类的listFiles()方法是静态方法,因此无需实例化TraverseFile对象就可以调用。listFiles()方法要求传入File对象,因此需要实例化File对象,并指定要遍历的目录。
程序执行结果如下图所示:

从输出结果可以看出,test2目录下有子文件夹print和三个图片文件。在print文件夹下有data目录,没有文件。在data目录下有src目录,也没有文件。