IO框架(九)File类、FileFilter接口、递归

IO框架(九)File类、FileFilter接口、递归

Flie类

概念

  • 代表物理盘符中的一个文件或者文件夹

方法

createNewFile()//创建-一个新文件
mkdir()//创建一个新目录
delete()//删除文件或空目录
exists ()//判断File对象所对象所代表的对象是否存在
getAbsolutePath()//获取文件的绝对路径
getName()//取得名字
getParent () //获取文件/目录所在的目录
isDirectory()//是否是目录
isFile()//是否是文件
length()//获得文件的长度
listFiles()//列出目录中的所有内容
renameTo()//修改文件名为

分隔符

  • 路径分隔符;
  • 名称分隔符\

举例1(输出分隔符)

public class Dome01 {
    public static void main(String[] args) {
        separator();
    }
    public static void separator(){
        System.out.println("路径分隔符"+ File.pathSeparator);
        System.out.println("名称分隔符"+File.separator);
    }
}
//输出:
路径分隔符;
名称分隔符\

举例2(文件)

public class Demo02 {
    public static void main(String[] args) throws Exception{
        fileOpe();
    }
    public static void fileOpe()throws Exception {
        //创建文件对象
        File file=new File("D:\\file.txt");//绝对路径,在该目录下创建
        File file2=new File("file2.txt");//相对路径,在本文件夹内创建
        //打印路径
        System.out.println(file.toString());
        //检查硬盘中是否有该文件
        if(!file.exists()) {
            //创建文件(创建文件到硬盘上)
            boolean b = file.createNewFile();
            System.out.println("结果" + b);
        }
        //删除文件
        //方式1(直接删除)
        System.out.println("删除结果"+file.delete());
        //方式2(使用jvm退出时删除)
        file.deleteOnExit();
        //获取文件信息
        System.out.println("获取文件信息:"+file.getAbsolutePath());
        System.out.println("获取路径:"+file.getPath());
        System.out.println("获取文件名称:"+file.getName());
        System.out.println("获取父目录:"+file.getParent());
        System.out.println("获取文件长度:"+file.length());
        System.out.println("获取文件创建时间:"+new Date(file.lastModified()).toString());//file.lastModified()为long类型,可以转换为Date类型
        //判断
        System.out.println("是否可写:"+file.canWrite());
        System.out.println("是否是文件:"+file.isFile());
        System.out.println("是否隐藏:"+file.isHidden());
    }
}

举例3(文件夹)

public class Demo03 {
    public static void main(String[] args) throws Exception{
        directoryOpe();
    }
    //文件夹操作
    public static void directoryOpe()throws Exception{
        //创建文件夹
        File dir=new File("D:\\aaa\\bbb ");
        System.out.println(dir.toString());
        //检查硬盘中是否有该文件夹
        if(!dir.exists()) {
            //创建文件(创建文件到硬盘上)
            boolean b = dir.mkdir();
            System.out.println("结果" + b);
        }
        //删除文件夹
        //直接删除(只能删除空目录)
        System.out.println("删除结果"+dir.delete());
        //使用jvm删除
        dir.deleteOnExit();
        //获取文件夹信息
        System.out.println("获取绝对路径:"+dir.getAbsolutePath());
        System.out.println("获取路径:"+dir.getPath());
        System.out.println("获取文件夹名称:"+dir.getName());
        System.out.println("获取父目录:"+dir.getParent());
        System.out.println("获取文件创建时间:"+new Date(dir.lastModified()).toString());//file.lastModified()为long类型,可以转换为Date类型
        //判断
        System.out.println("是否是文件夹:"+dir.isDirectory());
        System.out.println("是否隐藏:"+dir.isHidden());
        //遍历文件夹
        File dir2=new File("D:\\图片");
        String[] files=dir2.list();
        System.out.println("----------------------");
        for (String file : files) {
            System.out.println(file);
        }
    }
}

FileFilter接口(文件过滤器)

文件过滤器

  • public interface FileFilter
    • boolean accept(File pathname)

作用

  • 当调用File类中的listFiles()方法时,支持传入FileFilter接口接口实现类,对获取文件进行过滤,只有满足条件的文件的才可出现在listFiles()的返回值中

举例

public class Demo04 {
    public static void main(String[] args) throws Exception{
        directoryOpe();
    }
    public static void directoryOpe()throws Exception{
        File dir2=new File("D:\\aaa\\bbb");
        System.out.println("---------FileFilter接口的使用-----------");
        File[] files2=dir2.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                //当满足后缀名为txt时,返回该文件名称
                if(pathname.getName().endsWith(".txt")){
                    return true;
                }
                return false;
            }
        });
        for (File file : files2) {
            System.out.println(file);
        }
    }
}
//输出:
---------FileFilter接口的使用-----------
D:\aaa\bbb\1.txt
D:\aaa\bbb\安.txt
D:\aaa\bbb\张.txt
D:\aaa\bbb\李.txt
D:\aaa\bbb\王.txt
D:\aaa\bbb\赵.txt

递归

递归遍历文件夹(获得所有文件)

public class Demo05 {
    public static void main(String[] args) throws Exception{
        listDir(new File("D:\\aaa"));
    }
    public static void listDir(File dir)throws Exception{
        File[] files=dir.listFiles();//得到aaa下面的所有文件和文件夹
        if(files!=null&&files.length>0){
            for (File file : files) {
                //如果是文件夹则继续遍历,如果不是(如果是文件)就输出
                if(file.isDirectory()){
                    listDir(file);
                }else {
                    System.out.println(file.getAbsolutePath());
                }
            }
        }
    }
}
//输出:
D:\aaa\aas.txt
D:\aaa\bbb\1.txt
D:\aaa\bbb\安.txt
D:\aaa\bbb\张.txt
D:\aaa\bbb\李.txt
D:\aaa\bbb\王.txt
D:\aaa\bbb\赵.txt

递归删除文件夹

  • 因为删除文件夹必须先删除其中的文件,所以要用到递归

  • 删除aaa文件夹

    public class Demo06 {
        public static void main(String[] args) throws Exception{
            deleteDir(new File("D:\\aaa"));
        }
        public static void deleteDir(File dir)throws Exception{
            File[] files=dir.listFiles();//得到aaa下面的所有文件和文件夹
            //判断文件夹内是否还有东西,如果有东西则将里面的文件先删除
            if(files!=null && files.length>0){
                for (File file : files) {
                    //是文件夹时递归,是文件时删除文件
                    if(file.isDirectory()){
                        deleteDir(file);
                    }else {
                        System.out.println("删除:"+file.getAbsolutePath());
                        file.delete();//删除文件
                    }
                }
            }
            //将aaa里面的文件都删除之后再执行删除aaa的操作
            System.out.println("删除"+dir.getAbsolutePath());
            dir.delete();
        }
    }
    //输出:
    删除:D:\aaa\aas.txt
    删除:D:\aaa\bbb\1.txt
    删除:D:\aaa\bbb\安.txt
    删除:D:\aaa\bbb\张.txt
    删除:D:\aaa\bbb\李.txt
    删除:D:\aaa\bbb\王.txt
    删除:D:\aaa\bbb\赵.txt
    删除D:\aaa\bbb
    删除D:\aaa\ccc
    删除D:\aaa\ddd
    删除D:\aaa
    
posted @ 2022-02-13 16:47  史小鹏  阅读(127)  评论(0)    收藏  举报