Java IO流06:File类和FileFilter接口

File类

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

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

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

public class Main{

    /**
     * 创建文件时必须抛出异常
     */
    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()方法判断文件或目录是否存在
         */
        if (!f1.exists()) {

            /**
             * createNewFile()方法创建文件,返回true
             */
            System.out.println(f1.createNewFile());
        }

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

        /**
         * 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 Main{

    public static void main(String[] args) {

        File f2 = new File("1");
        System.out.println(f2.mkdir());

        /**
         * 在参数中实现FileFilter接口,重写accept()方法,自定义选择文件的条件,返回一个File类型数组
         */
        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 Main{

    public static void main(String[] args) {

        File file = new File("d:\\JAVA");
        deleteFile(file);
    }

    /**
     * 创建一个递归函数,递归打印和删除文件
     */
    public static void deleteFile(File file){

        File[] list = file.listFiles();

        if (list != null){

            for (File fi : list) {

                /**
                 * 采用递归判断子文件是否为目录
                 */
                if (fi.isDirectory()){
                    deleteFile(fi);
                }
                else {
                    
                    System.out.println(fi.getName());
                    System.out.println(fi.delete());
                }
            }
        }

        /**
         * 先把所有文件删除以后,才能删除目录
         */
        System.out.println(file.delete());
    }
}
posted @ 2021-09-13 10:54  振袖秋枫问红叶  阅读(94)  评论(0)    收藏  举报