Java IO流06:File类和FileFilter接口

File类

File类代表物理盘符中的一个文件或文件夹

其不具有从文件读取信息和向文件写入信息的功能,它仅描述文件本身的属性

import java.io.File;
import java.io.IOException;
import java.util.Arrays;

public class Hello{
    public static void main(String[] args) throws IOException {  //创建文件时必须抛出异常
        //File.pathSeparator生成路径分隔符;
        System.out.println("路径分隔符" + File.pathSeparator);

        //File.separator生成名称分隔符\
        System.out.println("名称分隔符" + File.separator);

        //先创建File类的对象,才能对文件进行操作
        File f1 = new File("1.txt");
        File f2 = new File("1");
        File f3 = new File(".");

        //exists()方法判断文件或目录是否存在
        //createNewFile()方法创建文件,返回true
        if (! f1.exists()) {
            System.out.println(f1.createNewFile());
        }

        //mkdir()方法创建目录,返回true(mkdirs()方法可以创建多级目录)
        System.out.println(f2.mkdir());

        //isDirectory()方法判断是否是目录
        System.out.println(f2.isDirectory());

        //delete()方法删除文件或目录,返回true(只能删除空目录,多级目录只能删除最里层那个)
        System.out.println(f2.delete());

        //isFile()方法判断是否是文件
        System.out.println(f1.isFile());

        //getName()方法获取文件名
        System.out.println(f1.getName());

        //getPath()方法获取文件相对路径
        System.out.println(f1.getPath());

        //getAbsolutePath()方法获取文件绝对路径
        System.out.println(f1.getAbsolutePath());

        //length()方法获取文件大小
        System.out.println(f1.length());

        //canWrite()方法判断文件是否可写
        System.out.println(f1.canWrite());

        //list()方法返回当前路径下所有文件和文件夹的名称,保存为数组
        System.out.println(Arrays.toString(f3.list()));
    }
}

FileFilter接口

当调用File类中的listFiles()方法时,支持传入FileFilter接口实现类的对象作为参数,对获取的文件进行过滤

import java.io.File;
import java.io.FileFilter;

public class Hello{
    public static void main(String[] args) {
        File f2 = new File("1");
        System.out.println(f2.mkdir());
        
        //FileFilter实现类可以自定义选择文件的条件
        File[] files = f2.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                if (pathname.getName().endsWith(".jpg")) {
                    return true;
                }
                return false;
            }
        });
        for (File f : files){
            System.out.println(f.getName());
        }
    }
}

练习:递归打印文件夹所有文件路径,和删除所有文件

import java.io.File;

public class Hello{
    public static void main(String[] args) {
        File file = new File("d:\\JAVA");
        test(file);
    }
	
    //要递归打印和删除,因此要创建一个方法来调用
    public static void test(File file){
        File[] list = file.listFiles();
        if (list != null){
            for (File fi : list) {
                if (fi.isDirectory()){
                    //采用递归判断子文件是否为目录
                    test(fi);
                }
                else {
                    System.out.println(fi.getName());
                    System.out.println(fi.delete());
                }
            }
        }
        //先把所有文件删除以后,才能删除目录
        System.out.println(file.delete());
    }
}
上一篇:函数递归


下一篇:js高级---闭包