package day0703;
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;
/**
* 提供文件操作的方法(1、删除目录中的所有内容,2、查找用户需要的文件)
*
* @author Administrator
*
*/
public class FileUtils {
/**
* 删除指定目录中的所有内容
*
* @param dir
* 将要删除的目录
* @return
* true删除成功 false删除失败---递归尽量写成private方法,public去调用它
*/
public static boolean deleteDir(File dir){
if(dir==null ||!dir.exists()||!dir.isDirectory()){
throw new IllegalArgumentException("目录必须有效");//抛出错误的参数异常
}
return doDelete(dir);
}
/**
*
* deleteDir()重载
*
* @param pathname
* 将要删除的目录路径
* @return
* 返回deleteDir()的返回值,true:删除成功,false:删除失败
*/
public static boolean deleteDir(String pathname){
File file=new File(pathname);
return deleteDir(file);
}
/**
* 递归删除某目录下的所有内容
*
* @param dir
* 将要删除的目录
* @return
* true:删除成功,false:删除失败
*/
private static boolean doDelete(File dir) {
File[] subs= dir.listFiles();
//delete subs
for(File sub:subs){
if(sub.isDirectory()){
doDelete(sub);//递归
}else{
sub.delete();
}
}
return dir.delete();
}
/**
*
* @param dir
* 要查找的目录
* @param ff
* 符合用户需要的文件过滤器
* @return
* 若没有找到匹配的文件,则返回null;若找到,则返回数组(包含所有找到的匹配文件)
*/
public static File[] findFiles(File dir, FileFilter ff) {
List<File> fileList = new ArrayList<File>();
//把找到的文件放入fileList
doFind(fileList,dir,ff);
return fileList.toArray(new File[]{});
//把集合变成数组
}
/**
* findFiles()重载
* @param dir
* 要查找的目录
* @param suffix
*
* @return
*/
public static File[] findFiles(File dir,final String suffix){
return findFiles(dir,new FileFilter(){
public boolean accept(File pathname){
if(pathname.isFile()&&pathname.getName().endsWith(suffix)){
return true;
}
return false;
}
});
}
/**
*
* @param fileList
* 将查找到的文件放入此容器中
* @param dir
* 将要查找的目录
* @param ff
* 符合需要的文件过滤器
*/
private static void doFind(List<File> fileList,File dir,FileFilter ff){
File[] subs=dir.listFiles();
for(File sub:subs){
if(sub.isDirectory()){
doFind(fileList,sub,ff);
}else{
if(ff.accept(sub)){
fileList.add(sub);
}
}
}
}
public static void main(String[] args) {
File[] file = findFiles(new File("F:/a"), new MyFileFilter());
}
}
|