关于文件搜索
突然感觉压力山大,原因是多方面的,最主要的是这两年来,都荒废了。
最近,我参加了华信培训,期望能够提升我的动手能力,也非常感谢老师对我的淳淳教诲。
前几天,老师给我们讲了一个关于文件搜索的问题。
程序的功能为:根据输入的文件目录,查找文件名包含关键字的文件,并将其输出在一个特定的文本输入域中。
在这次的设计中,程序主要由两个部分组成:一个UI界面设计与查询代码。
UI界面主要有两个文本输入框、一个文本输入域及一个搜索按钮;查询代码主要是指查询方法query(String path,String key);在UI界面与出巡代码之间由动作监听器方法实现连接。
文本输入域支持多行输出,两个文本输入框中,其中一个为文件目录path的输入,另一个为关键字key的输入,
所有的东西都封装在一个FileSearch类中,由主方法实现调用。
代码如下:
package com.huaxin.io;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
/**
* 文件搜索器
*/
public class FileSearch {
JTextField field_dir;
JTextField field_key;
JTextArea area_content;
//显示界面
public void showUI(){
//创建窗体对象
JFrame frame = new JFrame();
//设置相关属性
frame.setTitle("文件搜索神器");
frame.setSize(400,600);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(3);
//创建现形布局对象
FlowLayout layout = new FlowLayout();
frame.setLayout(layout);
//创建组件对象们
field_dir = new JTextField(15);
field_key = new JTextField(10);
JButton button_query = new JButton("搜索");
area_content = new JTextArea(20,30);
//添加到窗体
frame.add(field_dir);
frame.add(field_key);
frame.add(button_query);
frame.add(area_content);
//给搜索按钮添加动作监听器
button_query.addActionListener(action_listener);
//可见
frame.setVisible(true);
}
//创建动作监听器对象
ActionListener action_listener = new ActionListener(){
public void actionPerformed(ActionEvent e){
area_content.setText("");//清空
//得到用户输入的信息
String dir = field_dir.getText();
String key = field_key.getText();
//查询
query(dir,key);
}
};
/**
* 查询指定目录下的和key相关的所有文件
* @param path
*/
public void query(String path,String key){
//构造file
File file = new File(path);
//判断
if(file.exists()){
if(file.isFile()){//是文件
//将文件名显示到文本输入域中
area_content.append(file.getAbsolutePath()+"\r\n");
}else if(file.isDirectory()){//是文件夹
File[] files = file.listFiles();
//遍历
for(File f:files){
if(f.isFile()){
if(f.getName().contains(key)){
area_content.append(f.getAbsolutePath()+"\r\n");
}
}else if(f.isDirectory()){
query(f.getAbsolutePath(),key);//递归调用本身
}
}
}
}else{
System.out.println("输入的路径有误!");
}
}
public static void main(String[] args) {
FileSearch fs = new FileSearch();
fs.showUI();
}
}
执行的结果如下:
在这次的课程中,许多以前忘记的知识点又重新闪现在我的脑海里,也学到了些新的知识,特别是那个动作监听器。好了,废话已经够多了,不说了!