Java文件查找小程序

功能:

在选择的目录中查找对应的文件名,类似于windows的查找功能。

程序:

package com.test.frame;

import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FilenameFilter;
import java.util.regex.Pattern;

import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.border.TitledBorder;

public class FileSearch extends JFrame {
    private static final long serialVersionUID = -497231270990815830L;
    /**
     * 常用的后缀名数组
     */
    private static final String[] SUFFIX = new String[] { ".txt", ".doc",
            ".gif", ".jpg", ".bp3", ".ppt", ".zip" };
    private static final String[] NULL_DATA = new String[] {};
    private JTextField txt_Dir;
    private JTextField txt_Search;
    private JComboBox cbox_End;
    private JButton btn_Dir;
    private JButton btn_Search;
    private JList jList;

    public FileSearch() {
        setTitle("\u5728\u6307\u5B9A\u8303\u56F4\u5185\u641C\u7D22\u6587\u4EF6");

        JPanel panel = new JPanel();
        getContentPane().add(panel, BorderLayout.CENTER);
        GridBagLayout gbl_panel = new GridBagLayout();
        gbl_panel.columnWidths = new int[] { 0, 0, 0, 0, 0, 0 };
        gbl_panel.rowHeights = new int[] { 0, 0, 0, 0 };
        gbl_panel.columnWeights = new double[] { 0.0, 0.5, 0.0, 0.5, 0.0,
                Double.MIN_VALUE };
        gbl_panel.rowWeights = new double[] { 0.0, 0.0, 1.0, Double.MIN_VALUE };
        panel.setLayout(gbl_panel);

        JLabel lbl_Dir = new JLabel("\u6587\u4EF6\u5730\u5740\uFF1A");
        GridBagConstraints gbc_lbl_Dir = new GridBagConstraints();
        gbc_lbl_Dir.anchor = GridBagConstraints.EAST;
        gbc_lbl_Dir.insets = new Insets(10, 10, 5, 5);
        gbc_lbl_Dir.gridx = 0;
        gbc_lbl_Dir.gridy = 0;
        panel.add(lbl_Dir, gbc_lbl_Dir);

        txt_Dir = new JTextField();
        GridBagConstraints gbc_txt_Dir = new GridBagConstraints();
        gbc_txt_Dir.insets = new Insets(10, 0, 5, 5);
        gbc_txt_Dir.fill = GridBagConstraints.HORIZONTAL;
        gbc_txt_Dir.gridx = 1;
        gbc_txt_Dir.gridy = 0;
        gbc_txt_Dir.gridwidth = 3;
        panel.add(txt_Dir, gbc_txt_Dir);
        txt_Dir.setColumns(10);

        btn_Dir = new JButton("\u9009\u62E9\u5730\u5740");
        GridBagConstraints gbc_btn_Dir = new GridBagConstraints();
        gbc_btn_Dir.insets = new Insets(10, 0, 5, 5);
        gbc_btn_Dir.gridx = 4;
        gbc_btn_Dir.gridy = 0;
        panel.add(btn_Dir, gbc_btn_Dir);

        JLabel lbl_Search = new JLabel("\u6587\u4EF6\u540D\uFF1A");
        GridBagConstraints gbc_lbl_Search = new GridBagConstraints();
        gbc_lbl_Search.anchor = GridBagConstraints.EAST;
        gbc_lbl_Search.insets = new Insets(5, 10, 5, 5);
        gbc_lbl_Search.gridx = 0;
        gbc_lbl_Search.gridy = 1;
        panel.add(lbl_Search, gbc_lbl_Search);

        txt_Search = new JTextField();
        GridBagConstraints gbc_txt_Search = new GridBagConstraints();
        gbc_txt_Search.insets = new Insets(5, 0, 5, 5);
        gbc_txt_Search.fill = GridBagConstraints.HORIZONTAL;
        gbc_txt_Search.gridx = 1;
        gbc_txt_Search.gridy = 1;
        panel.add(txt_Search, gbc_txt_Search);
        txt_Search.setColumns(10);

        JLabel lbl_End = new JLabel("\u540E\u7F00\uFF1A");
        GridBagConstraints gbc_lbl_End = new GridBagConstraints();
        gbc_lbl_End.anchor = GridBagConstraints.EAST;
        gbc_lbl_End.insets = new Insets(5, 5, 5, 5);
        gbc_lbl_End.gridx = 2;
        gbc_lbl_End.gridy = 1;
        panel.add(lbl_End, gbc_lbl_End);

        cbox_End = new JComboBox();
        GridBagConstraints gbc_cbox_End = new GridBagConstraints();
        gbc_cbox_End.insets = new Insets(5, 0, 5, 5);
        gbc_cbox_End.fill = GridBagConstraints.HORIZONTAL;
        gbc_cbox_End.gridx = 3;
        gbc_cbox_End.gridy = 1;
        panel.add(cbox_End, gbc_cbox_End);
        cbox_End.setModel(new DefaultComboBoxModel(SUFFIX));

        btn_Search = new JButton("\u641C\u7D22");
        GridBagConstraints gbc_btn_Search = new GridBagConstraints();
        gbc_btn_Search.fill = GridBagConstraints.HORIZONTAL;
        gbc_btn_Search.anchor = GridBagConstraints.EAST;
        gbc_btn_Search.insets = new Insets(5, 0, 5, 5);
        gbc_btn_Search.gridx = 4;
        gbc_btn_Search.gridy = 1;
        panel.add(btn_Search, gbc_btn_Search);

        JScrollPane scrollPane = new JScrollPane();
        GridBagConstraints gbc_scrollPane = new GridBagConstraints();
        gbc_scrollPane.insets = new Insets(10, 10, 10, 10);
        gbc_scrollPane.fill = GridBagConstraints.BOTH;
        gbc_scrollPane.gridwidth = 5;
        gbc_scrollPane.gridx = 0;
        gbc_scrollPane.gridy = 2;
        panel.add(scrollPane, gbc_scrollPane);

        jList = new JList(new DefaultListModel());
        jList.setBorder(new TitledBorder(null, "\u641C\u7D22\u7ED3\u679C",
                TitledBorder.LEADING, TitledBorder.TOP, null, null));
        scrollPane.setViewportView(jList);
        btn_Dir.addActionListener(btnHandler);
        btn_Search.addActionListener(btnHandler);
    }

    private ActionListener btnHandler = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == btn_Dir) {
                String strDir = txt_Dir.getText();
                // 弹出文件选择器,只能选择目录
                JFileChooser fileChooser = new JFileChooser(strDir);
                fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
                int mode = fileChooser.showOpenDialog(null);
                if (mode == JFileChooser.APPROVE_OPTION) {
                    File file = fileChooser.getSelectedFile();
                    if (file != null) {
                        txt_Dir.setText(file.getPath());
                    }
                }
            } else if (e.getSource() == btn_Search) {
                // 执行查找工作
                doSearch();
            }
        }
    };

    /**
     * 执行查找,并更新列表
     */
    protected void doSearch() {
        // TODO Auto-generated method stub
        String strDir = txt_Dir.getText();
        if (strDir == null || strDir.equals("")) {
            JOptionPane.showMessageDialog(null, "文件地址为空,请选择文件地址!");
            return;
        }
        File fileDir = new File(strDir);
        if (!fileDir.exists()) {
            JOptionPane.showMessageDialog(null, "文件地址无效,请重新选择文件地址!");
            return;
        }
        String searchName = txt_Search.getText();
        if (searchName == null || searchName.equals("")) {
            JOptionPane.showMessageDialog(null, "文件名为空,请输入文件名!");
            return;
        }
        String suffix = cbox_End.getSelectedItem().toString();
        String[] resultNames = getRightFileNames(fileDir, searchName, suffix);
        if (resultNames != null) {
            jList.setListData(resultNames);
        } else {
            jList.setListData(NULL_DATA);
        }
    }

    /**
     * 根据传入的文件名和后缀在指定的目录下搜索符合条件的文件名
     * 
     * @param fileDir
     * @param searchName
     * @param suffix2
     * @return
     */
    private String[] getRightFileNames(File fileDir, String searchName,
            final String suffix2) {
        // TODO Auto-generated method stub
        String[] fileNames = fileDir.list(new FilenameFilter() {

            @Override
            public boolean accept(File dir, String name) {
                // TODO Auto-generated method stub
                return name.endsWith(suffix2);
            }

        });
        if (fileNames == null || fileNames.length == 0) {
            JOptionPane.showMessageDialog(null, "文件地址中不存在该类型文件!");
            return null;
        }
        if (searchName.equals("*")) {
            // 处理只有一个*号的文件,直接返回即可
            return fileNames;
        } else if (searchName.equals("?")) {
            // 处理只有一个?号的文件,返回文件名长度为1的文件
            return lengthOne(fileDir, suffix2);
        } else if (searchName.contains("*") || searchName.contains("?")) {
            // 需要根据正则来进行匹配
            searchName = searchName.replaceAll("\\*", "\\.+");
            searchName = searchName.replaceAll("\\?", "\\.");
            return regexNameResult(fileDir, suffix2, searchName);
        } else {
            return fullNameResult(fileDir, suffix2, searchName);
        }
    }

    /**
     * 正则匹配
     * 
     * @param fileDir
     * @param suffix2
     * @param searchName
     * @return
     */
    private String[] regexNameResult(File fileDir, final String suffix2,
            final String searchName) {
        // TODO Auto-generated method stub
        final Pattern pattern = Pattern.compile(searchName + suffix2);
        String[] fileNames = fileDir.list(new FilenameFilter() {

            @Override
            public boolean accept(File dir, String name) {
                // TODO Auto-generated method stub
                return name.endsWith(suffix2)
                        && pattern.matcher(name).matches();
            }

        });
        return fileNames;
    }

    /**
     * 全匹配
     * 
     * @param fileDir
     * @param suffix2
     * @param searchName
     * @return
     */
    private String[] fullNameResult(File fileDir, final String suffix2,
            final String searchName) {
        // TODO Auto-generated method stub
        String[] fileNames = fileDir.list(new FilenameFilter() {

            @Override
            public boolean accept(File dir, String name) {
                // TODO Auto-generated method stub
                return name.endsWith(suffix2)
                        && name.equals(searchName + suffix2);
            }

        });
        return fileNames;
    }

    /**
     * 返回文件名长度为1的值
     * 
     * @param fileDir
     * @param suffix2
     * @return
     */
    private String[] lengthOne(File fileDir, final String suffix2) {
        // TODO Auto-generated method stub

        String[] fileNames = fileDir.list(new FilenameFilter() {

            @Override
            public boolean accept(File dir, String name) {
                // TODO Auto-generated method stub
                return name.endsWith(suffix2)
                        && name.length() == 1 + suffix2.length();
            }

        });
        return fileNames;
    }

    public static void main(String[] args) {
        final FileSearch fileSearch = new FileSearch();
        fileSearch.setSize(500, 500);
        fileSearch.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fileSearch.setLocationRelativeTo(null);
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                fileSearch.setVisible(true);
            }
        });
    }

}

运行界面:

这里写图片描述

使用说明:

  点击选择地址按钮,选择查找的目录文件夹;
  
  输入要查找的文件名后点击搜索按钮,支持和?匹配,代表多个字符,?代表1个字符;
  
  搜索结果在下方的列表中列出,没有结果显示为空。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java后台小程序源码"名片"是一个简单的管理名片信息的应用程序。它利用Java语言开发,并使用了一些常用的后端技术。 这个程序的主要功能包括添加、编辑、删除和查询名片信息。用户可以输入姓名、职位、公司、电话号码和电子邮件等信息,然后将其保存在数据库中。用户还可以针对已有的名片进行修改或者删除操作。另外,该程序还提供了一个搜索功能,用户可以根据不同的条件来查找特定的名片。 这个应用程序的后台使用了Java的相关技术。它使用了Java Servlet来处理前端的请求,并负责与数据库的交互。数据库采用了MySQL,通过Java JDBC技术来实现与数据库之间的数据传输。程序中还使用了基本的HTML、CSS和JavaScript来构建前端界面,让用户能够通过浏览器来操作。 在这个程序中,用户通过访问网页来使用功能。他们可以在网页上看到一个简单的表单,可以输入和提交名片信息。当用户提交信息时,Servlet会将数据存储到数据库中,并返回一个确认消息。用户也可以通过表单来查询和编辑已有的名片信息。 这个程序的源码是开放的,用户可以根据自己的需要进行定制和修改。源码中包含了数据库的表结构和相关的Java代码。用户可以通过阅读代码来了解程序的实现原理,也可以根据自己的需求进行扩展和优化。 总之,Java后台小程序源码"名片"是一个简单而实用的名片管理应用,通过使用Java后台技术,帮助用户高效地管理和查询名片信息。 ### 回答2: Java后台小程序源码名片主要是指用Java语言编写的一种后台小程序的源码,用于展示个人或者团队的技术能力和项目经验。 一般来说,Java后台小程序源码名片应该包含以下几个方面的内容: 1. 项目介绍:简要介绍这个后台小程序的基本功能和所涉及的技术栈,例如使用的框架、数据库等。 2. 部署方式:说明如何在本地或者服务器上运行这个后台小程序代码,包括所需的环境配置和依赖项。 3. 数据库设计:如果这个后台小程序涉及到数据库操作,应该包含数据库的设计文档,包括表结构、关系图等。 4. 接口文档:如果这个后台小程序提供了接口供其他程序调用,应该提供接口文档,包括接口地址、请求方式、参数和返回值等。 5. 源码结构:详细描述源码目录结构,以及各个文件的功能和作用。 6. 关键代码解析:选择一些关键的代码进行解析,说明其实现思路和具体功能。 7. 注意事项:提醒用户在使用这个后台小程序源码时需要注意的一些事项,例如可能会遇到的异常、优化建议等。 总体来说,Java后台小程序源码名片是用来展示一个项目的技术实力和可用性的重要材料,通过提供详细的文档和源代码,可以帮助其他开发者快速理解和使用这个项目。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值