思路:
编写文件管理器,实现文件的批量操作。 具体功能: 1.用户输入指令1,代表“指定关键字检索文件”, 此时需要用户输入检索的目录和关键字, 系统在用户指定的目录下检索出文件名中包含关键字的文件 并将其绝对路径展示出来 2.用户输入指令2,代表“指定后缀名检索文件”, 此时需要用户输入检索的目录和后缀名(多个后缀名用逗号分隔), 系统在用户指定的目录下检索出指定后缀名的文件, 并将其绝对路径展示出来。 3.用户输入指令4,代表“删除文件/目录”, 此时需要用户输入需要删掉的文件目录, 程序执行后会将目录以及目录下的内容全部删除。 4.用户输入5,代表“退出”,即退出系统。
代码:
代码结构:
FileUtils类:
package base.base025;
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
public class FileUtils {
public static ArrayList<String> listFiles(File file,String key){
//创建文件名称过滤器对象
FilenameFilter filter = new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
//把dir和name封装成一个File对象
File currFile = new File(dir,name);
//判断currFile是否是一个文件,并且文件的名称包含key
if(currFile.isFile() && name.contains(key)){
return true;
}
return false;
}
};
//获取满足条件的所有文件
//调用fileDir方法
ArrayList<String> arrayList = fileDir(file,filter);
return arrayList;
}
//递归算法
public static ArrayList<String> fileDir(File dir,FilenameFilter filter){
//创建集合对象存储执行后的结果
ArrayList<String> arrayList = new ArrayList<>();
//获取file对象下面的所有文件以及文件夹对应的file数组,把文件名称过滤器传递过去
File[] lists = dir.listFiles(filter);
for(File list : lists){
//获取文件的绝对路径,将其存储到ArrayList集合中
arrayList.add(list.getAbsolutePath());
}
//获取当前目录下所有文件的数组
File[] files = dir.listFiles();
for(File file:files){
if(file.isDirectory()){
ArrayList<String> every = fileDir(file,filter);
arrayList.addAll(every);
}
}
//返回
return arrayList;
}
}
测试类:
package base.base025;
import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;
/*
批量操作文件管理器
编写文件管理器,实现文件的批量操作。
具体功能:
1.用户输入指令1,代表“指定关键字检索文件”,
此时需要用户输入检索的目录和关键字,
系统在用户指定的目录下检索出文件名中包含关键字的文件
并将其绝对路径展示出来
2.用户输入指令2,代表“指定后缀名检索文件”,
此时需要用户输入检索的目录和后缀名(多个后缀名用逗号分隔),
系统在用户指定的目录下检索出指定后缀名的文件,
并将其绝对路径展示出来。
3.用户输入指令4,代表“删除文件/目录”,
此时需要用户输入需要删掉的文件目录,
程序执行后会将目录以及目录下的内容全部删除。
4.用户输入5,代表“退出”,即退出系统。
*/
public class Test25 {
public static void main(String[] args) {
//输出用户操作
System.out.println("1.指定关键字检索文件");
System.out.println("2.指定后缀名检索文件");
System.out.println("3.删除文件/目录");
System.out.println("4.退出系统");
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请输入指令:");
int command = sc.nextInt();
switch (command) {
case 1:
//指定关键字检索文件
searchByKeyWord();
break;
case 2:
//指定后缀名检索文件
searchBySufferfix();
break;
case 3:
//删除文件/目录
break;
case 4:
//退出系统
exit();
break;
default:
System.out.println("您输入的指令有误!请重新输入。");
break;
}
}
}
//指定后缀名进行检索
private static void searchBySufferfix() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要检索的目录位置:");
String path = sc.next();
}
//退出系统
private static void exit() {
System.out.println("您已退出系统,谢谢使用。");
System.exit(0);
}
//指定关键字搜索文件
private static void searchByKeyWord() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要检索的目录位置:");
String path = sc.next();
File file = new File(path);//封装成一个对象
//判断这个目录是否存在、是否是目录
if (!file.exists() || !file.isDirectory()) {
System.out.println(path + "[不是有效目录!]");
return;
}
System.out.println("请输入检索的关键字:");
String key = sc.next();
//获取这个目录下所有包含key这个关键字的文件
ArrayList<String> list = FileUtils.listFiles(file, key);
for (String P : list) {
System.out.println(P);
}
//退出系统
}
}