【Python】用于遍历java文件,将其中用到的注解Annotation都统计出来的Python程序
自从用上了SpringBoot,文件里是一堆注解,有的熟悉,有的生疏,如果有天需要整理一遍的话,编个程序把所有用到的注解都统计出来是个好主意。这个任务正适合用python完成,下面就是程序:
#encoding=utf-8 import os,fnmatch,re class Caculator: def __init__(self,javaProjectFolder): self.folder=javaProjectFolder def tranversal(self): print('进入目录:'+self.folder) self.matches=[] for root,subdirs,files in os.walk(self.folder): for filename in fnmatch.filter(files,'*.java'): self.matches.append(os.path.join(root,filename)) def printJavaFiles(self): print('\n共找到'+str(len(self.matches))+'个java文件如下:') for i,javafile in enumerate(self.matches): print(str(i+1)+'.'+javafile) def findAnnotations(self): self.map={} pattern="\s*[@]([A-Z]{1}[a-zA-Z]+)\s*" for i,javafile in enumerate(self.matches): with open(javafile,'r',encoding='utf-8') as infile: for line in infile: list=re.findall(pattern,line) if len(list)>0: for i,anno in enumerate(list): #print(anno) if anno in self.map: self.map[anno]=self.map[anno]+1 else: self.map[anno]=1 def printAnnoAsAbcOrder(self): print('\n>以字典序打印(含出现次数)注解如下:') list=sorted(self.map.items(),key=lambda x:x[0]) for item in list: print(item) def printAnnoAsCountOrder(self): print('\n>以出现次数打印注解如下:') list=sorted(self.map.items(),key=lambda x:x[1]) for item in list: print(item) def printAnnotations(self): print('\n>以字典序打印注解如下:') list=[] for key in self.map.keys(): list.append(key) list=sorted(list) for item in list: print(item) cclt = Caculator('C:\hy\prog\myBank') cclt.tranversal() cclt.printJavaFiles() cclt.findAnnotations() cclt.printAnnoAsAbcOrder() cclt.printAnnoAsCountOrder() cclt.printAnnotations()
运行效果:
C:\hy\py>python annotationsInJava.py 进入目录:C:\hy\prog\myBank 共找到15个java文件如下: 1.C:\hy\prog\myBank\.mvn\wrapper\MavenWrapperDownloader.java 2.C:\hy\prog\myBank\src\main\java\com\hy\mybank\MyBankApplication.java 3.C:\hy\prog\myBank\src\main\java\com\hy\mybank\RedisConfig.java 4.C:\hy\prog\myBank\src\main\java\com\hy\mybank\ctrl\ActionController.java 5.C:\hy\prog\myBank\src\main\java\com\hy\mybank\ctrl\JsonController.java 6.C:\hy\prog\myBank\src\main\java\com\hy\mybank\Entity\Student.java 7.C:\hy\prog\myBank\src\main\java\com\hy\mybank\mapper\AccountMapper.java 8.C:\hy\prog\myBank\src\main\java\com\hy\mybank\mapper\AccountSql.java 9.C:\hy\prog\myBank\src\main\java\com\hy\mybank\mapper\StudentMapper.java 10.C:\hy\prog\myBank\src\main\java\com\hy\mybank\mapper\StudentSql.java 11.C:\hy\prog\myBank\src\main\java\com\hy\mybank\mapper\TransferException.java 12.C:\hy\prog\myBank\src\main\java\com\hy\mybank\mq\RabbitMqMsgReceiver.java 13.C:\hy\prog\myBank\src\main\java\com\hy\mybank\mq\RabbitMqMsgSender.java 14.C:\hy\prog\myBank\src\main\java\com\hy\mybank\service\AccountService.java 15.C:\hy\prog\myBank\src\test\java\com\hy\mybank\MyBankApplicationTests.java >以字典序打印(含出现次数)注解如下: ('Autowired', 8) ('Bean', 4) ('Component', 3) ('Configuration', 1) ('Controller', 1) ('EnableCaching', 1) ('GetMapping', 3) ('Insert', 1) ('Mapper', 2) ('ModelAttribute', 2) ('Override', 2) ('Param', 4) ('RabbitHandler', 1) ('RabbitListener', 1) ('RequestMapping', 7) ('Resource', 3) ('RestController', 1) ('Select', 4) ('SelectProvider', 2) ('SpringBootApplication', 1) ('SpringBootTest', 1) ('Test', 1) ('Transactional', 1) ('Update', 1) ('Value', 8) >以出现次数打印注解如下: ('SpringBootApplication', 1) ('Configuration', 1) ('EnableCaching', 1) ('Controller', 1) ('RestController', 1) ('Update', 1) ('Insert', 1) ('RabbitListener', 1) ('RabbitHandler', 1) ('Transactional', 1) ('SpringBootTest', 1) ('Test', 1) ('Override', 2) ('ModelAttribute', 2) ('Mapper', 2) ('SelectProvider', 2) ('GetMapping', 3) ('Component', 3) ('Resource', 3) ('Bean', 4) ('Select', 4) ('Param', 4) ('RequestMapping', 7) ('Value', 8) ('Autowired', 8) >以字典序打印注解如下: Autowired Bean Component Configuration Controller EnableCaching GetMapping Insert Mapper ModelAttribute Override Param RabbitHandler RabbitListener RequestMapping Resource RestController Select SelectProvider SpringBootApplication SpringBootTest Test Transactional Update Value
-END-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2019-09-26 最简SpringBoot程序制法
2017-09-26 【Canvas】逐像素在canvas中显示一张图片
2017-09-26 【Canvas与图标】蓝色数据库图标
2017-09-26 【Canvas与诗词】什么力也瞬灭不了火炭般的眼睛...
2017-09-26 【Canvas与图标】正方形牛皮纸文件袋图标
2017-09-26 【Canvas与图标】蓝色三角函数图标(120*120)
2017-09-26 【Canvas与技法】绘制简化“美元”标志