呼呼,从假期归来!
虽然集训中学习了文件的各种操作:文件的创建、删除等,但是经过了那么长时间,还是忘记了许多。
文件主要就是要学会使用它的方法。所以 ,最近又重新做了一遍文件搜索器。通过这个搜索器来复习文件的内容。
搜索器的外部框架的构建可以参考原来String界面开发。
private void initGUI() {
JFrame jf= new JFrame();
jf.setTitle("文件搜索器");//标题
jf.setSize(600,600);//大小
jf.setLocationRelativeTo(null);//显示位置
jf.setResizable(false);//不可改变大小
jf.setDefaultCloseOperation(3);//程序关闭
JPanel north = new JPanel();//创建一个北边面板
// north.setPreferredSize(new Dimension(50,0));
JLabel jl1 = new JLabel("目录:");
north.add(jl1);
String[] str1 = new String[]{"C:\\","D:\\","E:\\","F:\\"};//创建一个字符数组
JComboBox jc1 = new JComboBox(str1);//实例化一个复选框
jc1.setEditable(true);//设置复选框可编辑
north.add(jc1);//将复选框添加到面板上
JLabel jl2 = new JLabel("文件名:");
north.add(jl2);
JTextField jt = new JTextField(10);//实例化一个可编辑框
north.add(jt);//将可编辑框添加到面板上
JLabel jl3 = new JLabel("扩展名:");
north.add(jl3);
String[] str2 = new String[]{".*",".txt",".png",".gif"};//创建一个字符数组
JComboBox jc2 = new JComboBox(str2);//实例化一个复选框
jc2.setEditable(true);//设置复选框可编辑
north.add(jc2);//将复选框添加到面板上
JButton jb = new JButton("确定");
north.add(jb);
jf.add(north,BorderLayout.NORTH);//将面板加到窗体上
JTextArea jta = new JTextArea();//创建一个显示文本的多行区域
jta.setEditable(false);
jta.append("请点击确定按钮开始查找...");
JScrollPane js = new JScrollPane(jta);
jf.add(js,BorderLayout.CENTER);
//创建一个事件处理类
FileListener fl = new FileListener(jc1,jc2,jt,jta);
//给按钮添加监听器
jb.addActionListener(fl);
jf.setVisible(true);//可见
}
然后,创建一个监听器用来命令按钮以达到搜索的目的。
public void actionPerformed(ActionEvent e) {
pathname1 = jc1.getSelectedItem().toString();//获取目录选项
name = jt.getText();//获取文件名
pathname2 = jc2.getSelectedItem().toString();//获取文件名后缀
FileThread ft = new FileThread(jta, pathname1,name,pathname2);//开一个文件线程
ft.start();
}
最后就是这个搜索器最重要的代码了。
public class FileThread extends Thread {
private JTextArea jta;
private String pathname1;
private String name = "", pathname2 = "";
public FileThread(JTextArea jta, String pathname1, String name,
String pathname2) {
super();
this.jta = jta;
this.pathname1 = pathname1;
this.name = name;
this.pathname2 = pathname2;
}
public int FindFile(String path) {
int count = 0;
File file = new File(path);// 创建一个文件类
File[] filelist = file.listFiles();// 列表目录
//判断目录是否为空
if (filelist == null || filelist.length == 0) {
return 0;
} else {
for (int i = 0; i < filelist.length; i++) {
if (filelist[i].isFile()) {
String filename = filelist[i].getAbsolutePath();//获取文件名
//判断文件名是否与你要找的文件一致
if (name.equals("") && pathname2.equals(".*")) {
count++;
jta.append("\n" + filename);
}else if(name.equals("")&&!pathname2.equals(".*")){
if(filename.endsWith(pathname2)){
count++;
jta.append("\n" + filename);
}
}else if(!name.equals("")&&pathname2.equals(".*")){
int temp1 = filename.lastIndexOf("\\");
int temp2 = filename.lastIndexOf(".");
if(temp1<temp2){
String nametemp = filename.substring(temp1+1,temp2);
if(nametemp.equals(name)){
count++;
jta.append("\n" + filename);
}
}
}else{
String nametemp = name + "." + pathname2;
if(filename.endsWith(nametemp)){
count++;
jta.append("\n" + filename);
}
}
} else if (filelist[i].isDirectory()) {
count += FindFile(filelist[i].getAbsolutePath());
}
}
}
return count;
}
public void run() {
int count = FindFile(pathname1);//运行寻找文件的方法
//统计文件总数
if (count != 0) {
jta.append("\n");
jta.append("文件总数为:" + count);
}
}
}
利用线程使得搜索出来的文件能够一边在文本上显示一边执行搜索操作。