【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-
浙公网安备 33010602011771号