- 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.JLabel;
- import javax.swing.JOptionPane;
- import javax.swing.JScrollPane;
- import javax.swing.JTextArea;
- import javax.swing.JTextField;
- import javax.swing.WindowConstants;
- public class FileSearchFrame extends JFrame{
- //添加标签
- private JLabel lab1 = new JLabel("目录:");
- //路径文本框
- private JTextField txtPath = new JTextField();
-
- //标签
- private JLabel lab2 = new JLabel("关键字:");
- //关键字文本框
- private JTextField txtKey = new JTextField();
-
- //结果标签
- //按钮
- private JLabel labResult = new JLabel();
- JButton butSearch = new JButton("搜索");
-
- //文本域
- JTextArea txtResult = new JTextArea();
-
- //定义文件/文件夹记数字
- int dirCount = 0;
- int fileCount = 0;
-
- public FileSearchFrame(){
- init();
- addComponent();
- }
-
- private void init(){
-
- //设置窗体大小不可变
- this.setResizable(false);
- //设置大小
- this.setSize(650,440);
- //设置标题
- this.setTitle("文件搜索");
- //设置居中
- FrameTools.centerFrame(this);
- //设置布局
- this.setLayout(null);
- //设置关闭动作
- this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
- }
-
- private void addComponent() {
- lab1.setBounds(30, 30, 80, 25);
- this.add(lab1);
-
- txtPath.setBounds(70, 30, 300, 25);
- this.add(txtPath);
- lab2.setBounds(390, 30, 80, 25);
- this.add(lab2);
-
- txtKey.setBounds(440, 30, 100, 25);
- this.add(txtKey);
- butSearch.setBounds(570, 30, 60, 25);
- butSearch.addActionListener(new ActionListener(){
- @Override
- public void actionPerformed(ActionEvent e) {
- butSearchClick();
- }
- });
- this.add(butSearch);
- //JScrollPane
- JScrollPane scrollPane = new JScrollPane();
- scrollPane.setBounds(30, 70, 600, 300);
- //搜索结果文本域
- scrollPane.setViewportView(txtResult);
- this.add(scrollPane);
-
- //标签
- this.labResult.setBounds(30, 380, 600, 25);
- this.add(labResult);
-
- }
-
- //点击搜索按钮方法
- private void butSearchClick(){
- //获取目录
- String dirPath = txtPath.getText();
- File dir = new File(dirPath);
-
- //判断目录是否存在
- if(!dir.exists()){
- //为用户提示您输入的文件夹不存在,请仔细检查
- JOptionPane.showMessageDialog(this, "您输入的文件夹不存在,请仔细检查","信息有误",JOptionPane.ERROR_MESSAGE);
- return;
- }
-
- //判断是否是文件夹
- if(!dir.isDirectory()){
- //为用户提示您输入的不是文件夹,请仔细检查
- JOptionPane.showMessageDialog(this, "您输入的不是文件夹,请仔细检查!","信息有误",JOptionPane.ERROR_MESSAGE);
- return;
- }
-
- //获取关键字
- String key = txtKey.getText();
- //判断关键字是否已输入
- if(key.trim().equals("")){
- //为用户提示请输入关键字
-
- JOptionPane.showMessageDialog(this, "请输入关键字!","信息有误",JOptionPane.ERROR_MESSAGE);
- return;
- }
-
- //调用方法,将指定文件夹中包含关键字的文件或文件夹放到主窗口文本域
- searchFile(dir,key);
-
- //设置结果JLabel
- labResult.setText("目录:" + dirCount + "个 文件:" + fileCount + "个");
-
- }
- //搜索文件--递归方法
- //将指定文件夹中包含关键字的文件或文件夹放到主窗口文本域
- //将符合条件的文件或文件夹个数进行统计
-
- private void searchFile(File dir, String key){
-
- //获取该文件夹下所有的文件对象(文件夹与文件)
- File[] filesorDirs = dir.listFiles();
-
- //遍历数组,依次获取每一个文件对象
- for(File fileorDir : filesorDirs){
- //如果是文件
- if(fileorDir.isFile()){
- //进行文件处理
- //获取文件名
- String fileName = fileorDir.getName();
- //判断文件名是否包含
- if(fileName.contains(key)){
- //将符合条件的文件数+1
- fileCount++;
- //如果包含,将文件的绝对路径打印到文本域
- String fileAbsPath = fileorDir.getAbsolutePath();
- txtResult.append(fileAbsPath+"\r\n");
-
- }
- }
-
- //如果是文件夹
- if(fileorDir.isDirectory()){
- //判断文件名是否包含
- if(fileorDir.getName().contains(key)){
- //将符合条件的文件夹数+1
- dirCount++;
- //如果包含,就将文件夹的绝对路径打印到文本域
- String fileAbsPath = fileorDir.getAbsolutePath();
- //向文本域中追加内容
- txtResult.append(fileAbsPath + "\r\n");
- }
-
- //进行文件夹处理
- searchFile(fileorDir,key);
-
- }
- }
-
- }
-
-
- public static void main(String[] args) {
- new FileSearchFrame().setVisible(true);
- }
-
-
- }
复制代码 |
|