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入门到精通教程
查看: 818|回复: 0

为Java代码批量设置头注释

[复制链接]

该用户从未签到

发表于 2011-9-18 13:31:33 | 显示全部楼层 |阅读模式
大多正式一点的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语句来判断注释插入点,尚不严谨(比如原有的头注释中可能不包含这些关键字),仅供参考。

源码如下:


import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class HeaderCommentsGenerator {
    private static int count = 0;
    public static void main(String[] args) {
        final JFrame frame = new JFrame("TWaver中文社区之Swing探秘");
        JPanel contentPane = (JPanel) frame.getContentPane();
       JPanel centerPane = new JPanel(new BorderLayout(10, 10));
        centerPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 10));
        JPanel pathPane = new JPanel(new BorderLayout());
        final JTextField txtPath = new JTextField();
        txtPath.setText(&quotlease select your file or path.");
        pathPane.add(txtPath, BorderLayout.CENTER);
        JButton btnSelectPath = new JButton("Browser");
        btnSelectPath.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JFileChooser chooser = new JFileChooser();
                chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
                int returnVal = chooser.showOpenDialog(frame);
                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    txtPath.setText(chooser.getSelectedFile().getAbsolutePath());
                }
            }
        });
        btnSelectPath.setMnemonic('B');
        pathPane.add(btnSelectPath, BorderLayout.EAST);
        centerPane.add(pathPane, BorderLayout.NORTH);
        final JTextArea txtComments = new JTextArea();
        txtComments.setText("/*\n"
                + " * Copyright 2003-2004 ABC Software, Inc. All rights reserved.\n"
                + " */");
        centerPane.add(new JScrollPane(txtComments), BorderLayout.CENTER);
        contentPane.add(centerPane, BorderLayout.CENTER);
        JPanel buttonPane = new JPanel(new FlowLayout(FlowLayout.RIGHT, 10, 10));
        JButton btnOK = new JButton("Generate!");
        btnOK.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String path = txtPath.getText();
               File file = new File(path);
                if (!file.exists()) {
                    JOptionPane.showMessageDialog(frame,
                            "Path '" + path + "' not exist.",
                           "Error",
                            JOptionPane.ERROR_MESSAGE);
                } else {
                    commentFile(file, txtComments.getText());
                   JOptionPane.showMessageDialog(frame,
                            "Finish, total " + count + " files are processed.",
                           "Information",
                            JOptionPane.INFORMATION_MESSAGE);
               }
            }
       });
        btnOK.setMnemonic('G');
       JButton btnClose = new JButton("Close");
       btnClose.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent e) {
               System.exit(0);
            }
        });
      btnClose.setMnemonic('C');
       buttonPane.add(btnOK);
       buttonPane.add(btnClose);
       contentPane.add(buttonPane, BorderLayout.SOUTH);
       frame.setSize(500, 300);
     frame.show();
    }
    private static void commentFile(File file, String comments) {
        if (file != null && file.exists()) {
           if (file.isDirectory()) {
                String[] children = file.list();
                for (int i = 0; i < children.length; i++) {
                   File child = new File(file.getPath() + System.getProperty("file.separator") + children);
                    commentFile(child, comments);
                }
         } else {
                if (file.getName().toLowerCase().endsWith(".java")) {
                    System.out.println(file.getName());
                    count++;
                    try {
                        RandomAccessFile raFile = new RandomAccessFile(file, "rw");
                        byte[] content = new byte[(int) raFile.length()];
                        raFile.readFully(content);
                        String all = new String(content);
                        all = all.trim();
                       while (all.startsWith("\n")) {
                            all = all.substring(1);
                        }
                        if (all.indexOf("package") != -1) {
                            all = all.substring(all.indexOf("package"));
                        }
                       if (all.indexOf("import") != -1) {
                            all = all.substring(all.indexOf("package"));
                        }
                       all = comments + "\n" + all;
                        raFile.close();
                       FileWriter writer = new FileWriter(file);
                        writer.write(all);
                        writer.close();
                  } catch (Exception ex) {
                       ex.printStackTrace();
                    }
               }
           }
        }
   }
}

程序运行如下图:

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-10 23:39 , Processed in 0.301058 second(s), 36 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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