Java Swing编写批量模糊替换jar包小工具

这篇具有很好参考价值的文章主要介绍了Java Swing编写批量模糊替换jar包小工具。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

用途:由于jar包升级需要对之前jar包进行替换,而版本后缀不一致需要人工手动比对

作用:代码升级后,同一个模块jar包相同只有后缀不同,编写小工具进行比对进行替换名称,避免人工核对

技术点:Java Swing

好处:编写代码完成后,打包双击可直接运行,有用前台可视化页面,代码较少使用方便

Java Swing编写批量模糊替换jar包小工具

Java Swing基本组件介绍:

JPanel(面板)

JPanel是Java Swing包的一部分,是一个可以存储一组组件的容器。JPanel的主要任务是组织组件,可以在JPanel中设置各种布局,以更好地组织组件,但是它没有标题栏。

//创建一个新的 JPanel双缓冲区和流布局。  
JPanel jPanel = new JPanel() 
//创建一个新的 JPanel与 FlowLayout和指定的缓冲策略。  
JPanel jPanel = new JPanel(boolean isDoubleBuffered) 
//使用指定的布局管理器创建一个新的缓冲JPanel  
JPanel jPanel = new JPanel(LayoutManager layout) 
//使用指定的布局管理器和缓冲策略创建一个新的JPanel。  
JPanel jPanel = new JPanel(LayoutManager layout, boolean isDoubleBuffered) 

JLabel标签

JLabel是JPanel中的标签,可以包含文本、图像,或者两者都包括。

JLabel jLabel = new JLabel("Hi,我是标签");
//添加到面板
Jpanel1.add(jLabel);
//将面板添加到窗口
jFrame.add(Jpanel1);

小工具实现原理

根据浏览框选择我们想要替换的目录,根据选择的目录在后台读取该目录下的所有jar文件,并进行提示,防止误替换操作,点同意后,对原有jar包所在目录与新jar包所在目录进行对比替换,同时把日志打印在页面控制台,也可同时生成日志文件在本地目录作为保存。

public class MainFrame {
    public static void main(String[] args) {

        // 创建 JFrame 实例
        JFrame frame = new JFrame("jar包批量模糊替换");
        // Setting the width and height of frame
        frame.setSize(500, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        /* 创建面板,这个类似于 HTML 的 div 标签
         * 我们可以创建多个面板并在 JFrame 中指定位置
         * 面板中我们可以添加文本字段,按钮及其他组件。
         */
        JPanel panel = new JPanel();
        panel.setBounds(10,10,500,220);
//        // 添加面板
        frame.add(panel);
        JTextArea infoText4 = new JTextArea();
        /*
         * 调用用户定义的方法并添加组件到面板
         */
        placeComponents(panel,infoText4);
        // 设置界面可见
        frame.setVisible(true);
        frame.setBounds(500, 500, 650, 320);
    }

    private static void placeComponents(JPanel panel,JTextArea infoText4) {
        /* 布局部分我们这边不多做介绍
         * 这边设置布局为 null
         */
        panel.setLayout(null);

        // 创建 JLabel
        JLabel userLabel = new JLabel("执行更名目录");
        userLabel.setBounds(10, 20, 80, 25);
        panel.add(userLabel);

        /*
         * 创建文本域用于用户输入
         */
        final JTextField infoText = new JTextField();

        //  第一行输入框
        infoText.setBounds(150, 20, 350, 25);
        panel.add(infoText);


        JLabel userLabel2 = new JLabel("目标参考目录");
        userLabel2.setBounds(10, 50, 130, 25);
        panel.add(userLabel2);

        final JTextField infoText2 = new JTextField();

        //  第er行输入框
        infoText2.setBounds(150, 50, 350, 25);
        panel.add(infoText2);


        // 输入密码的文本域
        JLabel passwordLabel2 = new JLabel("模糊匹配规则");
        passwordLabel2.setBounds(10, 80, 130, 25);
        panel.add(passwordLabel2);
        //  第3行输入框
        final JTextField infoText3 = new JTextField();
        infoText3.setBounds(150, 80, 350, 25);
        infoText3.setText("bemp");
        infoText3.setEditable(false);
        panel.add(infoText3);

        // 按钮
        JButton loginButton = new JButton("浏览");
        loginButton.setBounds(500, 20, 100, 25);
        loginButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                infoText.setText(jButton1ActionPerformed(evt));
            }

        });
        panel.add(loginButton);

        JButton loginButton1 = new JButton("浏览");
        loginButton1.setBounds(500, 50, 100, 25);
        loginButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                infoText2.setText(jButton1ActionPerformed(evt));
            }

        });
        panel.add(loginButton1);
        //执行
        JButton loginButton2 = new JButton("执行");
        loginButton2.setBounds(150, 110, 350, 25);


        JScrollPane scrollpane=new JScrollPane();//创建滚动条面板
        scrollpane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scrollpane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        scrollpane.setBounds(20, 150, 600, 80);
        scrollpane.setViewportView(infoText4);
        panel.add(scrollpane);


        infoText4.setLineWrap(true);



        loginButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                String text = infoText.getText();
                List<String> fileList = getFileList(text);

                if ("".equals(text) && "".equals(infoText2.getText())){
                    JOptionPane.showConfirmDialog(null, "请先选择目录","提示", JOptionPane.OK_CANCEL_OPTION);

                }else {
                    int i = JOptionPane.showConfirmDialog(null, "检测到"+text+"目录下含有"+fileList.size()+"个可替换文件是否需要替换","提示", JOptionPane.OK_CANCEL_OPTION);
                    if (i == 0){
                        String text1 = infoText2.getText();
                        Date date = new Date();
                        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//                    Logger.log("模糊替换开始执行"+sdf.format(date),text);
                        infoText4.append("模糊替换开始执行"+sdf.format(date));
                        infoText4.append("\n");
                        Changes(evt,text,text1,infoText4);
                        Date date1 = new Date();
//                    Logger.log("模糊替换执行结束"+sdf.format(date1),text);

                        infoText4.append("模糊替换结束执行"+sdf.format(date1));
                        infoText4.append("\n");
                }
                }
            }

        });
        panel.add(loginButton2);



    }
    private static String jButton1ActionPerformed(ActionEvent evt){
        JFileChooser chooser = new JFileChooser(); //文件选择
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        chooser.showOpenDialog(chooser);        //打开文件选择窗
        File openFile = chooser.getSelectedFile();    //获取选择的文件
        String textPath = openFile.getPath();    //获取选择文件的路径
        return textPath;
    }
    private static void Changes(ActionEvent evt,String text,String text1,JTextArea infoText4){
        List<String> fileList = getFileList(text);
        //参考目录
        List<String> fileList1 = getFileList(text1);
//根据自自己规则进行匹配
        for (int i = 0; i < fileList.size(); i++) {
            String filename = fileList.get(i).substring(text.length());
            
            for (int j = 0; j < fileList1.size(); j++) {
                String substring = filename.substring(1, 5);
                if (fileList1.get(j).contains(filename) && "bemp".equals(filename.substring(1, 5))){
                    if (!fileList.get(i).substring(text.length()+1).equals(fileList1.get(j).substring(text1.length()+1))){
                        //替换名称
                        File file = new File(fileList.get(i));
                        //修改成功
                        boolean b = file.renameTo(new File(text+fileList1.get(j).substring(text1.length())));
//                        Logger.log(fileList.get(i).substring(text.length()+1)+" -> "+fileList1.get(j).substring(text1.length()+1),text);
                        infoText4.append(fileList.get(i).substring(text.length()+1)+" -> "+fileList1.get(j).substring(text1.length()+1));
                        infoText4.append("\n");
                    }
                    break;
                }
            }

        }
    }
    public static List<String> getFileList(String strPath) {
        ArrayList<String> filelist = new ArrayList<>();
        File dir = new File(strPath.trim());
        File[] files = dir.listFiles(); // 该文件目录下文件全部放入数组
        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                String fileName = files[i].getName();
                if (files[i].isDirectory()) { // 判断是文件还是文件夹
                    //文件夹不管
                    //      getFileList(files[i].getAbsolutePath()); // 获取文件绝对路径
                } else {
                    String strFileName = files[i].getAbsolutePath();
                    if (strFileName.contains(".jar") && strFileName.contains("xxx")){
                        filelist.add(strFileName);
                    }

                }
            }
        }
        return filelist;

    }
}

文件生成日志

public class Logger {
    public static void log(String arg,String text){
        PrintStream out=null;
        try {
            if (!new File(text+"/logs").exists()){
                new File(text+"/logs").mkdir();
            }
            //指向一个文件日志
            Date nowTime=new Date();
            SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");
            String path = text+"/logs/"+"/bemp_jar_ren_log"+sdf.format(nowTime)+".txt";
            out=new PrintStream(new FileOutputStream(path,true));
            //改变输出方向,输出到out中
            System.setOut(out);


            System.out.println(arg);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }finally {
            if(out !=null){
                out.close();
            }
        }
    }

}

 文章来源地址https://www.toymoban.com/news/detail-509438.html

到了这里,关于Java Swing编写批量模糊替换jar包小工具的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Windows系统编写bat脚本启动,停止,重启Java服务jar包

    创建一个以bat后缀结束的文件,写入一下代码: 在Windows系统上面创建 start.bat 启动jar包脚本编辑以下内容: 给窗口命名:“jeeplus-gateway”,如果是微服务的话方便查看 在Windows系统上面创建 stop.bat 停止jar包脚本编辑以下内容: 重启jar包就是将两个合并到一起: 双击 bat文件 确

    2024年02月03日
    浏览(57)
  • VMOS+小黄鸟解决抓包小程序无网络问题2(附工具)

            接上篇有粉丝反馈说按照上面的配置设置好依然会出现抓包时无网络问题,今天又打开虚拟机调试了一番,发现了一种更加简单高效的方法。 1. vmos pro破解版 2. 小黄鸟 3. JustTrustMe 此篇略,详情参考上一篇,点击跳转。 上篇中安装的是安卓7.1精简版, 本篇采用安

    2023年04月15日
    浏览(27)
  • 使用java内置工具jar手动创建xxx.jar文件

    平时我们一般都是在IDE工具中使用插件打包JAVA项目为 XXX.jar文件,  其实这个工作我们手动也可以完成, 也非常简单, 使用JDK自带的jar命令行工具即可. jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ... 创建 jar:     jar cf jar-file input-file(s) 查看 jar 文件内容:    ja

    2024年01月18日
    浏览(33)
  • 【Java可执行命令】(五)打包部署工具 jar:深入解析应用程序打包、分发和部署工具jar ~

    Java的可执行命令程序 jar (Java Archive)最早作为一项功能在JDK 1.0中引入。它的 设计目的是为了方便在Java平台上进行打包、分发和部署应用程序 。 jar 文件可以将多个Java类、资源文件和其他依赖项打包成一个单独的归档文件,以实现更简单的应用程序管理和传输。 jar 文件是

    2024年02月11日
    浏览(49)
  • java项目常用工具jar包方法整理

    一、commons-lang3 1、 字符串,数字,日期,数组等工具类 StringUtils 字符串工具类 StringEscapeUtils NumberUtils 数字工具类 ArrayUtils 数组工具类 RandomUtils 随机数工具类 RandomStringUtils 随机字符串工具类 DateUtils 日期工具类 DateFormatUtils时间格式化 DurationFormatUtils时间段格式化 StopWatch 秒表

    2024年02月11日
    浏览(26)
  • jar包反编译工具(java-decompiler)

    下载地址:http://java-decompiler.github.io/ 优点:反编译的源代码基本符合,没有乱七八糟新增的修饰符 缺点:反编译过程耗时较长(50MB需要10分钟左右)            无法还原内部类 可以查看对应的class文件 导出源代码:点击file - Save All Sources按钮进行导出 下载地址:Release L

    2024年02月08日
    浏览(33)
  • notepad++ 批量替换删除指定字符之后 或者 之前的字符,Notepad+批量替换使用大全

    资源宝分享:www.httple.net 注意: 不支持多行表达式 (involving n, r, etc). 1 基本表达式 符号 解释 . 匹配任意字符,除了新一行(n)。也就是说 “.”可以匹配 r ,当文件中同时含有r and n时,会引起混乱。要匹配所有的字符,使用sS。 (…) 这个匹配一个标签区域. 这个标签可以被

    2024年02月07日
    浏览(47)
  • maven打出jar中动态替换占位符

    maven打出的jar中pom.xml动态替换占位符 有些时候某些公共工具jar包被项目引用后发现公共jar的pom.xml中的version依然还是占位符,例如下面 如何让其打包后动态替换呢,即替换为最终的版本,像下面这样 打包后发现会在jar包中生成如果路径:target/classes/META-INF/maven/ g r o u p I d / {gr

    2024年02月11日
    浏览(25)
  • 同义词替换-批量自动同义词替换软件

    同义词替换,今天给大家分享一款免费的同义词替换器,支持各种同义词替换。一个同义词可以替换多种同义词。同时还支持同义词文章替换详细参考图片 如何优化网站是每个专业SEO人员都熟悉的问题,也是每天必须做的功课之一。接下来,我们来谈谈网站中的高索引

    2024年02月09日
    浏览(27)
  • 「BUG」启动jar配置文件里的参数无法替换。

    项目场景: linux系统中启动springboot项目的jar,替换掉jar中原有的mysql配置。 问题描述: 启动脚本里,已经用通用的方式,java -jar xxx.jar --mysql.host=x.x.x.x:3306 -v,进行替换,但是执行的还是jar里bootstrap.yml中原有mysql地址配置。 原因分析: 分析也只能先是查看自己的启动脚本有没

    2024年02月02日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包