大家好 这是我第四篇在博客园的博客 今天我准备讲讲怎么制作文件检索器
所谓文件检索器 就是当你要查找一个文件但不知道它的全名时 可以根据你输入的片段字符将所有包含输入字符的文件检索出来让你选择 话不多说 我们来实现吧
首先我们想的是 定义一个全局的map集合 键存放的是文件的名称(因为map要求每个键都得不同,所以这里不考虑同名文件) 而值存放的是文件的绝对路径
而后我们得考虑怎么让map把该目录下所有文件加入了 很简单,遍历文件就行了.
当该目录下所有文件都存入集合中时 我们就要考虑怎么是实现检索功能了
当我们从控制台输入一段语句时 程序能够将所有包含该字段的文件绝对路径输出 所以我们自然而然想到了使用String类中的contain()方法 遍历map集合 把所有键中含有输出字段的值输出 这不就是我们的目的吗?
具体代码和运行截图如下
/**
* 完成一个文件检索器
* @author 雷神
*
*/
public class Exp1 {
/**
* 定义一个map集合(键是文件名 值是绝对路径)
*/
private Map<String,Object> map = new HashMap<>();
/**
* 获取指定文件夹下的绝对文件名
*/
public void getTheName(File f){
File[] file = f.listFiles();
for (int i = 0; i < file.length; i++) {
/**
* 获取文件绝对路径
*/
System.out.println(file[i].getAbsolutePath());
map.put(file[i].getName(), file[i].getAbsoluteFile());
if(file[i].isDirectory()){
getTheName(file[i]);
}
}
}
/**
* 文件筛选器
*/
public void showTheFile(String i){
int type = 0;
Set<String> set = map.keySet();
for (String s : set) {
if(s.contains(i)){
System.out.println(map.get(s));
type = 1;
}
}
if(type == 0){
System.out.println("没有找到该文件");
}
}
public static void main(String[] args) {
File f = new File("D:\周杰伦");
Exp1 ex = new Exp1();
ex.getTheName(f);
while(true){
System.out.println("请输入你要查找的文件名:");
Scanner sc = new Scanner(System.in);
String i = sc.nextLine();
ex.showTheFile(i);
}
}
}
然后是运行截图
本人老杰迷了呢
最后重点来了 : 因为map存储数据的特点是通过键值对 所以不能对其中的值直接进行遍历
所以 我们通过 Set <String> keys = map.keySet(); 方法把map中的key转化成一个set集合
然后通过遍历keys 取到所对应的值
你学到东西了吗!!!!!