• 【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('
    共找到'+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('
    >以字典序打印(含出现次数)注解如下:')
            list=sorted(self.map.items(),key=lambda x:x[0])
            for item in list:
                print(item)
    
        def printAnnoAsCountOrder(self):
            print('
    >以出现次数打印注解如下:')
            list=sorted(self.map.items(),key=lambda x:x[1])
            for item in list:
                print(item)
    
        def printAnnotations(self):
            print('
    >以字典序打印注解如下:')
            list=[]
            for key in self.map.keys():
                list.append(key)
    
            list=sorted(list)
            for item in list:
                print(item)
    
    cclt = Caculator('C:hyprogmyBank')
    cclt.tranversal()
    cclt.printJavaFiles()
    cclt.findAnnotations()
    cclt.printAnnoAsAbcOrder()
    cclt.printAnnoAsCountOrder()
    cclt.printAnnotations()

    运行效果:

    C:hypy>python annotationsInJava.py
    进入目录:C:hyprogmyBank
    
    共找到15个java文件如下:
    1.C:hyprogmyBank.mvnwrapperMavenWrapperDownloader.java
    2.C:hyprogmyBanksrcmainjavacomhymybankMyBankApplication.java
    3.C:hyprogmyBanksrcmainjavacomhymybankRedisConfig.java
    4.C:hyprogmyBanksrcmainjavacomhymybankctrlActionController.java
    5.C:hyprogmyBanksrcmainjavacomhymybankctrlJsonController.java
    6.C:hyprogmyBanksrcmainjavacomhymybankEntityStudent.java
    7.C:hyprogmyBanksrcmainjavacomhymybankmapperAccountMapper.java
    8.C:hyprogmyBanksrcmainjavacomhymybankmapperAccountSql.java
    9.C:hyprogmyBanksrcmainjavacomhymybankmapperStudentMapper.java
    10.C:hyprogmyBanksrcmainjavacomhymybankmapperStudentSql.java
    11.C:hyprogmyBanksrcmainjavacomhymybankmapperTransferException.java
    12.C:hyprogmyBanksrcmainjavacomhymybankmqRabbitMqMsgReceiver.java
    13.C:hyprogmyBanksrcmainjavacomhymybankmqRabbitMqMsgSender.java
    14.C:hyprogmyBanksrcmainjavacomhymybankserviceAccountService.java
    15.C:hyprogmyBanksrc	estjavacomhymybankMyBankApplicationTests.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-

  • 相关阅读:
    [转]解密回声消除技术之二(应用篇)
    [转]解密回声消除技术之一(理论篇)
    Linux命令练级初级
    [转]win7+ubuntu 13.04双系统安装方法
    c/c++常用代码--清空目录
    c++程序开发利器
    vc2005 编译ACE-6.2.0
    Facebook Login api
    IIS7.0 下使用Intelligencia.UrlRewriter时Session为空问题
    无后缀名伪静态路径在IIS7.0的网站提示 "404
  • 原文地址:https://www.cnblogs.com/heyang78/p/15338469.html
Copyright © 2020-2023  润新知