图形界面综合练习——查找文件内容

描述:在窗口中输入查找范围(文件夹)和需要找的内容(关键字),找出满足条件的文件个数。

在这里插入图片描述
就直接上代码:

import javax.swing.*;
import java.awt.*;
import java.io.*;

public class Frame_Thread_File {
    public static void main(String[] args) {
        //初始化线程
        EventQueue.invokeLater(() -> new MyFrame().setVisible(true));
    }
    
    //界面类
    /**
     * 1.输入框{
     * 输入1.项目目录
     * 2.查找范围(文件名关键字)
     * 3.内容关键字
     * }
     * 2.搜索按钮{
     * 使用长耗时任务线程
     * 监听鼠标按钮
     * 1.判断输入内容是否合法
     * 2.开始搜索
     * }
     * 3.对话框{
     * 提示找到了多少个满足条件的文件
     * }
     */
    static class MyFrame extends JFrame {
        MyFrame() {
            setSize(1000, 800);
            setLocation(100, 100);
            setTitle("查找文件");
            setLayout(null);//如果没有这个,设置面板大小失败
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            //输入框面板
            JPanel io_Panel = new JPanel();
            io_Panel.setBounds(10, 10, 200, 100);
            JLabel l1 = new JLabel("项目目录:");
            JTextField t1 = new JTextField();
            t1.setPreferredSize(new Dimension(100, 20));
            JLabel l2 = new JLabel("查找内容:");
            JTextField t2 = new JTextField();
            t2.setPreferredSize(new Dimension(100, 20));

            io_Panel.add(l1);
            io_Panel.add(t1);
            io_Panel.add(l2);
            io_Panel.add(t2);

            //查找按钮
            JPanel button_panel = new JPanel();
            JButton b = new JButton("点击查找");
            JLabel l = new JLabel();
            b.addActionListener(e -> {
                SwingWorker worker = new SwingWorker() {
                    @Override
                    protected Void doInBackground() {
                        String folder = t1.getText();
                        String content = t2.getText();
                        if (folder.length() == 0 && content.length() == 0) {
                            JOptionPane.showMessageDialog(null, "输入不能为空!");
                            return null;
                        } else {
                            if (!file_D(folder)) {
                                JOptionPane.showMessageDialog(null, "文件夹不存在!");
                                return null;
                            }
                            l.setText("正在加载...");
                            //查找文件
                            search(folder, content);
                            JOptionPane.showMessageDialog(null, "有"+count+"个文件");

                            l.setText("加载完毕");
                        }
                        return null;
                    }
                };
                worker.execute();
            });
            button_panel.add(b);
            button_panel.add(l);
            button_panel.setBounds(300, 30, 80, 80);

            add(io_Panel);
            add(button_panel);
        }
		//判断文件是不是文件夹
        public static boolean file_D(String s) {
            File f = new File(s);
            return f.isDirectory();
        }
        
        /**查找文件的方法
         * 1.项目目录
         * 3.内容关键字
         */
        static int count = 0;//记录符合要求的文件的个数
        public static void search(String folder, String content) {
            File file = new File(folder);
            File[] files = file.listFiles();//文件夹下的子文件
            assert files != null;
            for (File f1 : files) {
                if (f1.isDirectory()) {
                    search(f1.getAbsolutePath(), content);
                } else {
                    select(f1, content);
                }
            }
        }

        //查找
        public static void select(File f, String str) {
            try (FileReader fr = new FileReader(f)) {
                char[] charArr = new char[(int) f.length()];
                fr.read(charArr);
                String s = String.copyValueOf(charArr);
                if(s.contains(str))
                    count++;

            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值