Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 433|回复: 0

[Swing学习]为Java代码批量设置头注释

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-11-7 23:57:02 | 显示全部楼层 |阅读模式
    大多正式一点的java源代码,在头部都设有头注释信息。我们做的软件项目或者产品代码中,一般也需要设置一些公司信息、作者信息、版权信息等内容。现在的NetBeans或Eclipse等IDE工具都能很好的自动生成这些注视。不过如果要对你的整个项目代码进行批量的头注视修改、替换、维护,又该如何呢?本文用Swing做了一个小工具,来解决这个问题。 以下是JDK的源码的头注释的例子。
    1 /*
    2  * @(#)Object.java 1.61 03/01/23
    3  *
    4  * Copyright 2003 Sun Microsystems,... reserved.
    5  * SUN PROPRIETARY/CONFIDENTIAL...to license terms.
    6  */
    7
    8  package java.lang;
    9
    10  public class Object {...}
      
       
       
         
       

         
       
      
        如果我们有个小工具能把我们项目里所有目录下的Java代码统一设置头注释就好了;比如当版本信息等改变时,只要重新运行一下即可一次性更新。下面我们就来亲自写一个。 思路很简单: (1)建立一个窗口,用户可以设置一个目录、编写头注释信息;
    (2)查找目录下所有子文件,如果是Java文件则处理之,如果是目录则递归处理;
    (3)处理Java文件时,打开后,找到package语句或者第一个import语句,作为注释的插入点,插入注释;
    (4)将增加了头注释的文件内容写回文件。
    (5)本例中判断头注释插入点的逻辑比较简单,只是根据package语句或者第一个import语句来判断注释插入点,尚不严谨(比如原有的头注释中可能不包含这些关键字),仅供参考。

    源码如下:
    1. import java.io.*;
    2. import java.awt.*;
    3. import java.awt.event.*;
    4. import javax.swing.*;
    5. public class HeaderCommentsGenerator {
    6.     private static int count = 0;
    7.     public static void main(String[] args) {
    8.         final JFrame frame = new JFrame("TWaver中文社区之Swing探秘");
    9.         JPanel contentPane = (JPanel) frame.getContentPane();
    10.        JPanel centerPane = new JPanel(new BorderLayout(10, 10));
    11.         centerPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 10));
    12.         JPanel pathPane = new JPanel(new BorderLayout());
    13.         final JTextField txtPath = new JTextField();
    14.         txtPath.setText("Please select your file or path.");
    15.         pathPane.add(txtPath, BorderLayout.CENTER);
    16.         JButton btnSelectPath = new JButton("Browser");
    17.         btnSelectPath.addActionListener(new ActionListener() {
    18.             public void actionPerformed(ActionEvent e) {
    19.                 JFileChooser chooser = new JFileChooser();
    20.                 chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
    21.                 int returnVal = chooser.showOpenDialog(frame);
    22.                 if (returnVal == JFileChooser.APPROVE_OPTION) {
    23.                     txtPath.setText(chooser.getSelectedFile().getAbsolutePath());
    24.                 }
    25.             }
    26.         });
    27.         btnSelectPath.setMnemonic("B");
    28.         pathPane.add(btnSelectPath, BorderLayout.EAST);
    29.         centerPane.add(pathPane, BorderLayout.NORTH);
    30.         final JTextArea txtComments = new JTextArea();
    31.         txtComments.setText("/*
    32. "
    33.                 + " * Copyright 2003-2004 ABC Software, Inc. All rights reserved.
    34. "
    35.                 + " */");
    36.         centerPane.add(new JScrollPane(txtComments), BorderLayout.CENTER);
    37.         contentPane.add(centerPane, BorderLayout.CENTER);
    38.         JPanel buttonPane = new JPanel(new FlowLayout(FlowLayout.RIGHT, 10, 10));
    39.         JButton btnOK = new JButton("Generate!");
    40.         btnOK.addActionListener(new ActionListener() {
    41.             public void actionPerformed(ActionEvent e) {
    42.                 String path = txtPath.getText();
    43.                File file = new File(path);
    44.                 if (!file.exists()) {
    45.                     JOptionPane.showMessageDialog(frame,
    46.                             "Path "" + path + "" not exist.",
    47.                            "Error",
    48.                             JOptionPane.ERROR_MESSAGE);
    49.                 } else {
    50.                     commentFile(file, txtComments.getText());
    51.                    JOptionPane.showMessageDialog(frame,
    52.                             "Finish, total " + count + " files are processed.",
    53.                            "Information",
    54.                             JOptionPane.INFORMATION_MESSAGE);
    55.                }
    56.             }
    57.        });
    58.         btnOK.setMnemonic("G");
    59.        JButton btnClose = new JButton("Close");
    60.        btnClose.addActionListener(new ActionListener() {
    61.            public void actionPerformed(ActionEvent e) {
    62.                System.exit(0);
    63.             }
    64.         });
    65.       btnClose.setMnemonic("C");
    66.        buttonPane.add(btnOK);
    67.        buttonPane.add(btnClose);
    68.        contentPane.add(buttonPane, BorderLayout.SOUTH);
    69.        frame.setSize(500, 300);
    70.      frame.show();
    71.     }
    72.     private static void commentFile(File file, String comments) {
    73.         if (file != null && file.exists()) {
    74.            if (file.isDirectory()) {
    75.                 String[] children = file.list();
    76.                 for (int i = 0; i < children.length; i++) {
    77.                    File child = new File(file.getPath() + System.getProperty("file.separator") + children[i]);
    78.                     commentFile(child, comments);
    79.                 }
    80.          } else {
    81.                 if (file.getName().toLowerCase().endsWith(".java")) {
    82.                     System.out.println(file.getName());
    83.                     count++;
    84.                     try {
    85.                         RandomAccessFile raFile = new RandomAccessFile(file, "rw");
    86.                         byte[] content = new byte[(int) raFile.length()];
    87.                         raFile.readFully(content);
    88.                         String all = new String(content);
    89.                         all = all.trim();
    90.                        while (all.startsWith("
    91. ")) {
    92.                             all = all.substring(1);
    93.                         }
    94.                         if (all.indexOf("package") != -1) {
    95.                             all = all.substring(all.indexOf("package"));
    96.                         }
    97.                        if (all.indexOf("import") != -1) {
    98.                             all = all.substring(all.indexOf("package"));
    99.                         }
    100.                        all = comments + "
    101. " + all;
    102.                         raFile.close();
    103.                        FileWriter writer = new FileWriter(file);
    104.                         writer.write(all);
    105.                         writer.close();
    106.                   } catch (Exception ex) {
    107.                        ex.printStackTrace();
    108.                     }
    109.                }
    110.            }
    111.         }
    112.    }
    113. }
    复制代码
    程序运行如下图:
      

      
      
       
       

         
       

         
       
      
    复制代码

    源码下载:http://file.javaxxz.com/2014/11/7/235702531.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-25 10:08 , Processed in 0.348514 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表