0x00 前言
遇到这样一个基础需求:
- 需要提取Java中的所有方法
- 需要过滤所有访问权限为public的方法。
0x01 提取Java中的方法
- 语言:python
- 库:javalang
直接使用pip install 安装即可。
直接提供解决方案,中间夹杂了很多测试过程,这里不进行记录。
使用parse模块直接读取,会读取到一个方法,这个方法中的types会存有所有类信息的列表。
tree = javalang.parse.parse(f.read())
如果是直解析一个类则可以直接选择types[0]
classs=tree.types[0]
获取到的classs同样包含了两类内容,一个是属性,还有一个是方法,每一个都对应了一个具体内容。我们使用classs.body进行获取
for i in classs.body:
这里我只想要读取到method,而不想要属性,选择取巧的方式,属性不具备body属性,所以可以先进行i.body,再进行异常抛出即可。
在method类中modifiers表示前缀,则可以直接使用in的方式挑出public属性的方法:
for i in classs.body:try:if"public"in i.modifiers:
i.body
print(i.name)except Exception as e:pass
最终解决方案如下:
import javalang
withopen("cs.java","r",encoding='utf-8')as f:
tree = javalang.parse.parse(f.read())
classs=tree.types[0]for i in classs.body:try:if"public"in i.modifiers:
i.body
print(i.name)except Exception as e:pass
效果如下:
版权归原作者 王嘟嘟_ 所有, 如有侵权,请联系我们删除。