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。深吸一口气,迫不及待地想一览究竟了!
本文详细介绍了Java中File类的使用,包括构造File对象、文件和目录的基本属性检查、创建与删除文件及目录、遍历目录以及根据特定条件过滤文件。通过实例展示了如何获取文件信息、创建删除目录、查找特定类型的文件以及递归搜索子目录。
3934





