【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>() {@Overridepublic 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文件添加注释的功能,其中用到了 hutool-all 工具,其 pom 如下:

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

另外,程序也使用了 git log 查看文件的日志信息,以获取文件正确的作者,和完成时间。该 git 命令详解,参考文章【Git】任何位置查看git日志

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/410331.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件工程应用题汇总

绘制数据流图(L0/L1/L2) DFD/L0&#xff08;基本系统模型&#xff09; 只包含源点终点和一个处理(XXX系统) DFD/L1&#xff08;功能级数据流图&#xff09;在L0基础上进一步划分处理(XXX系统) 个人理解 DFD/L2&#xff08;在L1基础上进一步分解后的数据流图&#xff09; 数据…

Unity关于新手引导中实现遮罩镂空效果

在新手引导每一步中实现可以遮掉其他部分而显示当前需要点击的部分&#xff0c;只需要在每一步引导的时候设置对应的镂空区域的RectTransform.效果如下图&#xff1a; 代码&#xff1a; public class SelfMaskSet : MaskableGraphic, ICanvasRaycastFilter {[SerializeField]p…

Matlab 求解非刚性微分方程(ode45)

语法 1、[t,y] ode45(odefun,tspan,y0) 2、[t,y] ode45(odefun,tspan,y0,options) 3、[t,y,te,ye,ie] ode45(odefun,tspan,y0,options) 4、sol ode45(___)描述 [t,y] ode45(odefun,tspan,y0) 其中&#xff0c;tspan [t0 tf] 为微分方程 odefun 的积分区间&#xff0c;y…

Unity之触发器

目录 &#x1f4d5;一、触发器概念 &#x1f4d5;二、碰撞与触发的区别 &#x1f4d5;三、触发器小实例 一、触发器概念 第一次玩侠盗猎车手是在小学&#xff0c;从那以后就开启了我的五星好市民之路。 下面是小编在小破站截的图&#xff0c;这是罪恶都市最开始的地方&a…

RabbitMQ交换机(1)

1.交换机Exchange RabbitMQ消息传递模型的核心思想是: 生产者生产的消息从不会直接发送到队列。实际上&#xff0c;通常生产者甚至都不知道这些消息传递传递到了哪些队列中。 相反&#xff0c;生产者只能将消息发送到交换机(exchange)&#xff0c;交换机工作的内容非常简单&am…

uniapp 简易自定义日历

注&#xff1a;此日历是根据接口返回的日期自动对应星期的&#xff0c;返回的数据中也包含星期&#xff0c;其实就是一个div自定义&#xff0c;可根据自己需求更改&#xff1b; 1、组件代码 gy-calendar-self.vue <template><view class"calendar"><…

基于dinoV2分类模型修改

前言 dinoV2已经发布有一段时间了&#xff0c;faecbook豪言直接说前面的结构我们都不需要进行修改&#xff0c;只需要修改最后的全连接层就可以达到一个很好的效果。我们激动的揣摸了下自己激动的小手已经迫不及待了&#xff0c;这里我使用dinoV2进行了实验&#xff0c;来分享…

Angular系列教程之自定义指令

文章目录 前言指令的基本概念在模板中使用指令总结 前言 在Angular中&#xff0c;指令是一种非常强大的工具&#xff0c;用于扩展HTML元素的功能和行为。它们允许我们创建可重用的组件&#xff0c;并在应用程序中的多个地方使用它们。本文将介绍Angular指令的基础知识&#xf…

软件测试|sqlalchemy relationship

简介 SQLAlchemy是一个流行的Python ORM&#xff08;对象关系映射&#xff09;库&#xff0c;它允许我们以面向对象的方式管理数据库。在SQLAlchemy中&#xff0c;relationship是一个重要的功能&#xff0c;用于建立表之间的关系。在本文中&#xff0c;我们将详细探讨relation…

基于MATLAB计算无线通信覆盖(一)环境准备

一、环境 MATLAB 2022b 注&#xff1a;开始仿真前需部署地理坐标区和地理图&#xff0c;最好采用第三种&#xff0c;直接把底图数据下载到本地&#xff0c;防止连接不上网络时只能显示darkwater的底图。 可用于地理坐标区和地理图的底图如下表所示 二、下载底图并安装 工具&…

低代码助力制造业数智转型,激发创新力迎接工业 4.0

随着科技的不断进步&#xff0c;我们迈入了一个崭新的工业时代——工业4.0。这场工业革命不仅颠覆了制造业的传统形象&#xff0c;还为全球生产方式带来了前所未有的变革。 在这一过程中&#xff0c;制造业数字化转型逐渐成为主旋律&#xff0c;而低代码技术在这其中发挥着重要…

Redis 服务器 命令

目录 1.Redis Client Pause 命令 - 在指定时间内终止运行来自客户端的命令简介语法可用版本: > 2.9.50返回值: 返回 OK。如果 timeout 参数是非法的返回错误。 示例 2.Redis Debug Object 命令 - 获取 key 的调试信息简介语法可用版本: > 1.0.0返回值: 当 key 存在时&…