File类的基本操作方法、FileFilter过滤器、递归

File类:顾名思义就是对操作系统上的文件进行操作的一个类

绝对路径:从盘符开始,是一个文件的完整路径,有唯一性

例 " F:\Program Files\aa.txt "

相对路径:相对于某个目录的路径,不具唯一性

例 " aa.txt "

只要不是以盘符开始的路径就是相对路径,默认的相对位置就是当前项目根目录

构造方法:

public File(String pathname)                                                                通过给定的路径名字符串创建指定路径的File文件对象

File f = new File("F:\\Program Files\\aa.txt");

注:因为在Java编译器中  \会被视为转译符,所以要两个\\才是文件一级一级分割的符号

public File(String parent, String child)                                                  从父路径名字符串和子路径名字符串创建File文件对象

File f = new File("F:\\Program Files","aa.txt");

public File(File parent, String child)                                                      从父File类对象和子路径名字符串创建File文件对象

File f = new File("F:\\Program Files");
File f2 = new File(f,"aa.txt");

File操作方法:

public String getAbsolutePath()                                                      返回File对象的绝对路径字符串

File f = new File("F:\\Program Files\\aa.txt");
System.out.println(f.getAbsolutePath());            //输出F:\Program Files\aa.txt

public String getPath()                                                                      返回创建File时的路径名字符串

File f = new File("F:\\Program Files\\aa.txt");
System.out.println(f.getPath());            //输出:F:\Program Files\aa.txt

public String getName()                                                                   返回File表示的文件或文件夹的名称

File f = new File("F:\\Program Files\\aa.txt");
System.out.println(f.getName());                //输出:aa.txt

public long length()                                                                            返回File表示文件的大小,单位是字节

File f = new File("F:\\Program Files\\aa.txt");
System.out.println(f.length());                //输出:83

若File指向的是文件夹,则length()方法返回的是不确定值,不代表大小

File getParentFile()                                                                             返回父路径文件对象

File f = new File("F:\\Program Files\\aa.txt");
File parentFile = f.getParentFile();                //获得一个File对象

File判断功能方法:

public boolean exists()                                                                       File表示的文件或文件夹是否实际存在

File f = new File("F:\\Program Files\\aa.txt");
System.out.println(f.exists());                //输出:true

public boolean isDirectory()                                                              File路径表示的文件是否是文件夹 

File f = new File("F:\\Program Files\\aa.txt");
System.out.println(f.isDirectory());                //输出:false

public boolean isFile()                                                                       File路径表示的文件是否是文件

File f = new File("F:\\Program Files\\aa.txt");
System.out.println(f.isFile());                    //输出:true

File创建和删除功能方法:

public boolean createNewFile()                                                           File路径指的是一个文件名,且该文件不存在时新建一个文件

File f = new File("F:\\Program Files\\bb.txt");
f.createNewFile();

注:父路径必须存在才可以创建,不然会报IOException

public boolean delete()                                                                           删除File路径表示的文件,或空文件夹

File f = new File("F:\\Program Files\\bb.txt");
boolean b = f.delete();
System.out.println(b);                    //输出:true

删除成功返回true,删除失败返回false。若删除的文件夹内还有文件则删除失败

public boolean mkdirs()                                                                          创建多级文件夹,无论父路径是否存在

File f = new File("F:\\Program Files\\bb\\cc\\dd\\bb\\aa");
boolean b = f.mkdirs();
System.out.println(b);                //输出:true

不能用来创建文件,只能创建文件夹

遍历File文件方法:

String[]  list ()                                                                                  遍历File目录中的所有文件和文件夹,存入String[]数组中

File f = new File("F:\\Program Files");
System.out.println(Arrays.toString(f.list()));
//输出:[aa.txt, bb, Blizzard App, CSGO, Steam, TGP]

File[]  listFiles()                                                                               遍历File目录中的所有文件和文件夹,存入File[] 数组中

File f = new File("F:\\Program Files");
System.out.println(Arrays.toString(f.listFiles()));
//输出:[F:\Program Files\aa.txt,
// F:\Program Files\bb,
// F:\Program Files\Blizzard App,
// F:\Program Files\CSGO,
// F:\Program Files\Steam,
// F:\Program Files\TGP]

FileFilter过滤器接口:

实现该接口的对象可以过滤文件

File[]  listFiles  (FileFilter   fileFilter)                                                       创建FileFilter接口的实现类对象

重写accept()方法,将判断条件写在返回值上,返回true则不过滤,返回false则过滤

File f = new File("F:\\Program Files");
File [] arr = f.listFiles(new FileFilter() {
    @Override
    public boolean accept(File pathname) {
        return pathname.isFile();
    }
});
System.out.println(Arrays.toString(arr));

上述例子中,return  pathname.isFile();   

则 F:\Program Files 路径下是文件就会返回true  ,否则返回false

最后输出:[F:\Program Files\aa.txt] 

File[]  数组中仅剩一个文件File对象  ,文件夹File对象都被过滤掉了

遍历文件夹中所有文件(包括子文件夹内的文件)

要遍历文件夹中子文件夹内的所有文件,就要引用一个方法——递归

public static void main(String[] args) throws IOException {
    File f = new File("F:\\Program Files");
    getFile(f);
}
public static void getFile(File file) {
    File[] arr = file.listFiles();
    for (File file1 : arr) {
        if (file1.isDirectory()) {
            getFile(file1);
        } else {
            System.out.println(file1.getName());
        }
    }
}

在循环中,利用if判断File是文件夹,则传回给本方法,再次进行循环判断

直到找到的File全是文件,则该方法就结束不再循环

最终就能找到文件夹中所有子文件夹的文件

这种在本方法中调用自己的方法就是递归

猜你喜欢

转载自blog.csdn.net/weixin_42022555/article/details/81771703