背景
有一段解析序列化文件(该序列化文件由java生成)的java代码,要求修改为python代码解析,但是由于java序列化文件的不能跨平台的特性,所以退而求其次,找到了Python中的第三方库,jpype,手动加载jar包。
jpype安装
(venv) F:\ideaProjects\pythonProject\venv\Scripts>pip.exe install jpype1 Collecting jpype1 Downloading JPype1-0.7.5-cp37-cp37m-win_amd64.whl (1.4 MB) |████████████████████████████████| 1.4 MB 1.6 MB/s Installing collected packages: jpype1 Successfully installed jpype1-0.7.5当看到Successfully installed jpype1-0.7.5时,表明已经安装成功,可以直接导入使用了。
jpype简单使用方法
import jpype # 定义java虚拟机的路径,可调用jpype自带的默认方法,也可以自己找到自己环境中的jvm路径(一般是java路径下的jre\bin\server\jvm.dll) jvm_path = jpype.getDefaultJVMPath() # 定义jar包路径 jar_path = "xxx.jar" # 判断JVM有没有启动 if not jpype.isJVMStarted(): # 这个判断非常重要,因为JVM在一个进程内就会自动关闭,后面在调用就会报错 jpype.startJVM(jvm_path, "-ea", "-Djava.class.path=%s" % ext_classpath) # 将jar包加载到JVM中 # 获取jar包中类的实例对象 j_class = jpype.JClass(\'GetDBKey\') # 调用类中方法 j_class.get_db_key() if jpype.isJVMStarted(): jpype.shutdownJVM() # 关闭java虚拟机
附:
import os jar_path = "xxx.jar" # 可直接通过命令行的方式运行该jar包,运行时调用该jar包里主类的main方法 os.system(\'java -jar %s\' % jar_path)
总结
JPype是一个能够让Python代码方便地调用Java代码的工具,适用于较为复杂的代码逻辑,有很强的灵活性;而附中所写方法是直接通过运行jar包的方式,只适用于处理简单的代码逻辑,缺少灵活性,各位看官可斟酌使用。