【Java】源码文件开头添加注释

这篇具有很好参考价值的文章主要介绍了【Java】源码文件开头添加注释。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求

应公司质量部要求,需要对代码做静态检查。质量部要求,源码文件必须在起始行起设置一些注释,然而项目已经开发了一年之久,且没有维护这个注释。

此时,面对好几千个源码文件,我们如何快速添加相应的注释呢?

对,自己写一个程序来实现。

分析

假设注释模板为

/*
 * Model: <模块>
 * Description:  <描述> 
 * Author: <作者>
 * Finished: <时间>
 */

只要获得 <模块><描述><作者><时间> 的值,既可以通过文档读写完成给源码添加注释的需求。

代码

根据分析,实现代码如下:

package com.xzbd.jrx;

import java.io.*;
import java.nio.charset.Charset;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RuntimeUtil;
import cn.hutool.core.util.StrUtil;

public class AddFileHeaderComment {

    private static String projectPath = "D:\\workspace\\builder_backend";

    public static void main(String[] args) {

        addFileHeaderComments(projectPath);
    }

    public static void addFileHeaderComments(String projectPath) {
        try {
            Files.walkFileTree(Paths.get(projectPath), new SimpleFileVisitor<Path>() {
                @Override
                public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                    String filePath = file.toString();

                    // 仅对Java文件进行
                    if (filePath.endsWith(".java")) {
                        addCommentToFile(file.toFile());
                    }
                    return FileVisitResult.CONTINUE;
                }
            });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void addCommentToFile(File file) {
        try {
            String packageName = getPackageName(file);
            String className = getClassName(file);
            String author = getAuthor(file);
            String date = getFileModifiedDate(file);

            String comment = String.format("/*%n" +
                    " * Model: %s%n" +
                    " * Description: %s%n" +
                    " * Author: %s%n" +
                    " * Finished: %s%n" +
                    " */%n%n", packageName, className, author, date);

            String originalContent = Files.readString(file.toPath());
            String newContent = comment + originalContent;

            Files.write(file.toPath(), newContent.getBytes("utf-8"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static String getPackageName(File file) throws IOException {
        String absolutePath = file.getAbsolutePath();
        String sep = "com\\xzbd\\";
        String packageName = StrUtil.subAfter(absolutePath, sep, false);
        packageName = StrUtil.subBefore(packageName, File.separator, false);
        
        // 可以使用 file.getParent().getFileName(); 根据需要调整
        return packageName;
    }

    public static String getClassName(File file) {

        return file.getName().replaceFirst("[.][^.]+$", "");
    }

    public static String getAuthor(File file) {
        String absolutePath = file.getAbsolutePath();
        String cmd = String.format("git --git-dir=%s\\.git --work-tree=%s log --reverse %s", projectPath, projectPath,
                absolutePath);
        List<String> execForLines = RuntimeUtil.execForLines(Charset.forName("utf-8"), cmd);

        for (String line : execForLines) {
            String sep = "Author:";
            if (StrUtil.startWith(line, sep)) {
                String useranme = StrUtil.subAfter(line, sep, false);
                return useranme;
            }
        }
        return "<Your Name>";
    }

    public static String getFileModifiedDate(File file) {
        String absolutePath = file.getAbsolutePath();
        String cmd = String.format("git --git-dir=%s\\.git --work-tree=%s log --reverse %s", projectPath, projectPath,
                absolutePath);
        List<String> execForLines = RuntimeUtil.execForLines(Charset.forName("utf-8"), cmd);

        for (String line : execForLines) {
            String sep = "Date:";
            if (StrUtil.startWith(line, sep)) {
                String dateStr = StrUtil.subAfter(line, sep, false);
                Date data = new Date(dateStr);
                DateTimeFormatter dateFmt = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
                String date = DateUtil.format(data, dateFmt);
                return date;
            }
        }
        DateTimeFormatter dateFmt = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
        String date = DateUtil.format(new Date(), dateFmt);
        return date;
    }
}


执行后的效果
【Java】源码文件开头添加注释,总结,java

总结

文中代码程序实现了对java文件添加注释的功能,其中用到了 hutool-all 工具,其 pom 如下:

		<dependency>
			<groupId>cn.hutool</groupId>
			<artifactId>hutool-all</artifactId>
			<version>5.8.16</version>
		</dependency>

另外,程序也使用了 git log 查看文件的日志信息,以获取文件正确的作者,和完成时间。该 git 命令详解,参考文章【Git】任何位置查看git日志文章来源地址https://www.toymoban.com/news/detail-798320.html

到了这里,关于【Java】源码文件开头添加注释的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • VScode实现文件、函数自动添加注释说明信息

    常规的手动注释费时费力,不方便,拖慢开发进度,甚至影响开发者心情,因此需要实现自动注释,不仅能减少工作量,也能让编写的代码更加的规范整洁,易于理解。 在VScode的插件搜索栏中,查找并下载 koroFileHeader 插件。 koroFileHeader 插件可以帮助快速实现,记录文件信息

    2024年04月09日
    浏览(52)
  • 在VScode中,文件自动添加头部注释-插件koroFileHeader配置

    korofileheader插件是用于一键生成文件头部注释并自动更新最后编辑人和编辑时间、函数注释自动生成和参数提取。 首先打开VScode,进入扩展商店,搜索 koroFileHeader 进行安装 打开设置-搜索 Fileheader -点击头部注释的 setting.json 文件 可以在其中配置头部注释 其中作者和邮箱可以

    2024年02月15日
    浏览(59)
  • 最新的Microsoft Visual Studio新建文件自动添加注释教程

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、注释是什么? 二、自动添加头部注释 1.添加注释教程 第一步:找到VS安装的路径,忘记了就点击VS图标,右键属性找到起始位置。  第二步:在安装路径下继续往下找一个叫Class.cs的文件

    2024年02月04日
    浏览(82)
  • 【华为OD机试真题】区块链文件转储系统(java&python)100%通过率 超详细代码注释 代码解读

    【华为OD机试真题 20222023】真题目录 @点这里@ 【华为OD机试真题】信号发射和接收 试读 @点这里@ 【华为OD机试真题】租车骑绿道 试读 @点这里@ 知识点栈链表单调栈Q滑窗 时间限制:2s空间限制:256MB限定语言:不限 区块链底层存储是一个链式文件系统,由顺序的N个文件组成,

    2024年02月04日
    浏览(39)
  • Java去掉数字字符串开头的0 四种方法 000010

    ** ** ** ** ** ** String str = “0000040”; int index = 0 ; List arr = str.toList(); for (int i = 0 ; iarr.size(); i++){ if (!arr.get(i).equals(“0”)){ index = i; break; } } String newStr= str.substring(index) System.out.println(newStr);

    2024年02月12日
    浏览(114)
  • java实现pdf文件添加水印,下载到浏览器

    添加itextpdf依赖 根据需求,不需要指定路径可以删除对应的输出流 效果如下:代码中的相对路径在src平级目录下,test.pdf是PdfStamper里面fileOutputStream生成的,test1.pdf是fos生成的 浏览器下载的如下: 生成的pdf内容如下(红框里面是pdf原来的内容,可以自己调整代码中注释掉的设

    2024年02月05日
    浏览(60)
  • yolo源码注释3——模型配置文件

    代码基于yolov5 v6.0 目录: yolo源码注释1——文件结构 yolo源码注释2——数据集配置文件 yolo源码注释3——模型配置文件 yolo源码注释4——yolo-py 模型配置文件一般放在 models 文件夹下的 XXX.yaml 文件中,以 yolov5s.yaml 为例:

    2024年02月13日
    浏览(35)
  • 在 C 语言中添加注释、包含头文件和使用 printf 函数输出字符串的方法

    注释是程序员在编写代码时添加给自己或其他人的说明文字,用来提高代码的可读性,方便理解。注释通常会添加在代码的关键部分以及不易理解的地方。 在C语言中,注释可以使用两种方式:单行注释以及多行注释。单行注释使用\\\"//\\\",多行注释使用\\\"/* */\\\"。多行注释不可嵌套

    2023年04月22日
    浏览(53)
  • WordPress给每个文章开头或者末尾添加内容

    有需求想要给每个文章开头或者末尾添加内容,百度搜了些代码,感觉好用,贴上来备忘。 使用方法:在主题文件的functions.php 中,直接添加以下代码即可。 在文章内容开头添加固定内容 在文章内容末尾添加固定内容   在开头和末尾同时添加固定内容 在自定义文章类型“

    2024年02月13日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包