一、File类的构造函数(三种)
1)File(File parent , String child)
2)File(String pathname)
3)File(String parent,String child)
二、File类的获取(即File类的常用方法)
返回类型 | 方法 | 解释 |
String | getAbsolutePath() | 返回此抽象路径名的绝对路径名字字符串 |
String | getName() | 返回由此抽象路径名表示的文件或目录的名称 |
String | getPath() | 将此抽象路径转换为一个路径名称字符串,即文件名字符串 |
long | length() | 返回此抽象路径名表示的文件的长度 |
三、文件和文件夹的创建删除等操作
返回类型 | 方法 | 解释 |
boolean | createNewFile() | 当且仅当不存在具有此抽象路径名指定名称的文件时, 不可分地创建一个新的空文件。 |
boolean | delete() | 删除此抽象路径名表示的文件或者目录/注意直接删除,不是回收站 |
boolean | exists() | 测试此抽象路径名表示的文件时否存在 |
boolean | isDirectory() | 测试此抽象路径名表示的是否是一个目录 |
boolean | isFile() | 测试此抽象路径名表示的是否是一个标准文件 |
boolean | mkdir() | 创建此抽象路径名指定的目录 |
四、ListFiles()方法介绍
返回类型 | 方法 | 解释 |
String[] | list() | 返回一个字符串数组,这些字符串指定此抽象路 径名表示的目录的文件和目录 |
File[] | listFiles() | 返回一个抽象路径名数组,这些路径名表示此抽象 路径名表示的目录中的文件 |
1、指定的目录必须是存在的
2、指定的必须是目录。否则容易引发返回数组为null,出现NullPointException
五、文件过滤器
File[] | listFiles(FilenameFilter) | 返回抽象路径名数组,这些路径名表示此抽象路径名表示的 目录中满足指定过滤器的文件和目录 |
需要实现的方法是 accept(File dir,String name) 返回类型boolean
解释:用来测试指定文件是否包含在某一文件列表中
public class FileDemo{
public static void main(String[] args){
File file = new File("A:\\code\\abc");
File[] files = file.listFiles(new MyFileFilter());
for( File f : files){
System.out.println(f);
}
}
}
class MyFileFilter implements FilenameFilter{
public boolean accept(File dir,String name){
return name.endsWith(".java");
}
}
除了上面的文件过滤方式,还有一个listFiles(FileFilter filter) 根据抽象路径名表示的目录中满足指定过滤器的文件和目录
需要重写的方法accept(File pahtname)
public class FileDemo2 { public static void main(String[] args) { //获取扩展名为.java所有文件 //创建File对象 File file = new File("E:\\code\\day11_code"); //获取指定目录下的文件夹 File[] files = file.listFiles(new FileFileterByDir()); //遍历获取到的所有符合条件的文件 for (File f : files) { System.out.println(f); } } }
//文件过滤器 class FileFileterByDir implements FileFilter{ public boolean accept(File pathname) { return pathname.isDirectory(); } }
六、递归
问题:搜索指定目录中.java文件(含子目录)
需求:打印指定目录即所有子目录中的.java文件的文件路径
要求:编写一个方法用来打印指定目录中的.java文件路径,并进行方法的调用
若指定的目录有子目录,那么把子目录中的.java文件路径也打印出来
步骤:
1. 指定要打印的目录File对象
2. 调用getFileAll()方法,传入要打印的目录File对象
2.1 通过FilenameFilter过滤器获取指定目录中的所有.java类型的File对象
2.2 遍历得到每一个File对象
2.3 判断当前File对象是否是目录
判断结果为true,说明为目录,通过递归,再次调用步骤2的getFileAll()方法
判断结果为false,说明是文件,打印文件的路径
public class FileDemo4 { public static void main(String[] args) { File file = new File("d:\\test"); getFileAll(file); } //获取指定目录以及子目录中的所有的文件 public static void getFileAll(File file) { File[] files = file.listFiles(MyFileFilter()); //遍历当前目录下的所有文件和文件夹 for (File f : files) { //判断当前遍历到的是否为目录 if(f.isDirectory()){ //是目录,继续获取这个目录下的所有文件和文件夹 getFileAll(f); }else{ //不是目录,说明当前f就是文件,那么就打印出来 System.out.println(f); } } } }
//定义类实现文件名称FilenameFilter过滤器 class MyFileFilter implements FilenameFilter{ public boolean accept(File dir, String name) { return name.endsWith(".java"); } }