使用File类查找室友私藏的小电影后,你猜我看到了啥!!??

本文详细介绍了Java中File类的使用,包括构造File对象、文件和目录的基本属性检查、创建与删除文件及目录、遍历目录以及根据特定条件过滤文件。通过实例展示了如何获取文件信息、创建删除目录、查找特定类型的文件以及递归搜索子目录。

File类

java.io.File类主要用于描述文件或目录路径的抽象表示信息,可以获取文件或目录的特征信息。
常用方法:

方法声明功能概述
File(String pathname)根据参数指定的路径名来构造对象
File(String parent, String child)根据参数指定的父路径和子路径信息构造对象
File(File parent, String child)根据参数指定的父抽象路径和子路径信息构造对象
boolean exists()测试此抽象路径名表示的文件或目录是否存在
String getName()用于获取文件的名称
long length()返回由此抽象路径名表示的文件的长度
long lastModified()用于获取文件的最后一次修改时间
String getAbsolutePath()用于获取绝对路径信息
boolean delete()用于删除文件,当删除目录时要求是空目录
boolean createNewFile()用于创建新的空文件
boolean mkdir()用于创建目录
boolean mkdirs()用于创建多级目录
File[] listFiles()获取该目录下的所有内容
boolean isFile()判断是否为文件
boolean isDirectory()判断是否为目录
File[] listFiles(FileFilter filter)获取目录下满足筛选器的所有内容

其中lastModified()方法获取到的是距离格林威治标准时间(1970年1月1日)的毫秒数,返回值是long类型。

使用方法

1.获取文件信息
//1.构造File类型对象与d:/a.txt文件关联
File file=new File("d:/a.txt");
//2.如果文件存在,读取文件名称、长度、最后调用时间,打印后删除
if(file.exists()){
    System.out.println("文件名称:"+file.getName());
    System.out.println("文件长度:"+file.length());
    Date date=new Date(file.lastModified());
    //格式化时间并打印
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    System.out.println("最后调用时间:"+sdf.format(date));
    System.out.println("绝对路径:"+file.getAbsolutePath());
    System.out.println("删除文件:"+file.delete());
}
//3.文件不存在则创建文件
else
    System.out.println("创建文件:"+file.createNewFile());

输出结果:
在这里插入图片
由于我在运行前创建好了a.txt文件,这里获取了该文件的信息,打印后删除额该文件。

2.获取目录信息

File还可以与目录关联,方法与关联文件相同。

//实现目录的创建与删除
 File path=new File("d:/齐天大圣/孙宇晨");
 if(path.exists()){
     System.out.println(path.getName());
     System.out.println(path.delete()?"删除成功":"删除失败");
 }
 else{
 	 //创建多级目录
     System.out.println(path.mkdirs()?"路径创建成功!":"路径创建失败!");
 }
3.获取该目录下的所有文件
File path=new File("d:/齐天大圣");
//获取该目录下的所有文件与目录
 File[] filesArray = path.listFiles();
 for (File f:filesArray) {
     if(f.isFile())
         System.out.print(f.getName()+" ");
     else if(f.isDirectory())//如果是目录,则加一个[]
         System.out.print("["+f.getName()+"] ");
 }
 System.out.println();

下面是室友齐天大圣的目录下地的文件。
在这里插入图片描述
然后执行代码:
在这里插入图片描述

不过很可惜,还是没有能找到室友私藏的小电影,可能他藏在了更加隐蔽的地方,下面我们要加大搜索的深度,并且限制查找的类型。

4.限制查找的文件的内容

在这里插入图片描述
使用带参数的listFiles方法时需要传入一个FileFilter类型的引用,在此我是使用匿名内部类的方法。

File path=new File("d:/齐天大圣");
        //匿名内部类
        FileFilter fileFilter=new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                //如果获取的到的文件以".avi"结尾或者该文件是目录,则对该文件进行获取
				if(pathname.getName().endsWith(".avi")||pathname.isDirectory())
                    return true;
                else
                    return false;
            }
        };
        //获取该目录下的所有文件与目录
        File[] filesArray = path.listFiles(fileFilter);
        for (File f:filesArray) {
            if(f.isFile())
                System.out.print(f.getName()+" ");
            else if(f.isDirectory())//如果是目录,则加一个[]
                System.out.print("["+f.getName()+"] ");
        }
        System.out.println();

输出结果:
在这里插入图片描述

这样,查找到的内容就只有小电影或者文件夹了,不过还是很可惜没有找到小电影,显然是因为当前目录下并没有小电影文件。

4.通过递归调用进入子目录搜索

为了对查找操作进行递归调用,在此将查找代码放入一个静态方法中。

public class FileTest {
    /**
     * 判断是否是视频文件
     * @param fileName 文件名称
     * @return
     */
    public static boolean fileTypeJudge(String fileName){
        String nameToLow=fileName.toLowerCase();
        if(nameToLow.endsWith(".avi")||nameToLow.endsWith(".mp4")||nameToLow.endsWith(".mkv")
                ||nameToLow.endsWith(".flv"))
            return true;
        else
            return false;
    }

    /**
     * 查找当前目录是否有视频文件
     * @param file
     * @param fileFilter
     * @return 是否有视频文件
     */
    public static boolean findMovies(File file,FileFilter fileFilter){
        File[] files = file.listFiles(fileFilter);
        if(files.length==0)return false;
        boolean b=false;
        for (File f:files) {
            //如果是文件类型
            if(f.isFile()){
                System.out.println(f.getName());
                b=true;
            }
            else if(f.isDirectory()){//如果是文件夹
                //如果子目录有视频文件
                if(findMovies(f,fileFilter)) {
                    b=true;
                    System.out.println("[" + f.getName() + "] ");//打印目录信息
                }
            }
        }
        return b;
    }

    public static void main(String[] args) {
        File path=new File("d:/齐天大圣");
        FileFilter fileFilter=new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                if(pathname.isDirectory()||FileTest.fileTypeJudge(pathname.getName()))
                    return true;
                else
                    return false;
            }
        };
        FileTest.findMovies(path,fileFilter);
    }
}

输出结果:
在这里插入图片描述
至此终于找到了室友私藏在几个目录中的文件,分别是D:\齐天大圣\孙宇晨\孙小空.avi、D:\齐天大圣\zhangfei\关羽.mp4与关羽 - 副本.mp4、D:\齐天大圣\zhangfei\guanyu\liubei\sunshangxiang.avi与貂蝉.mp4。深吸一口气,迫不及待地想一览究竟了!

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值