最近有个功能需要java与python之间的数据交互,java需要把参数传给python,然后python计算的结果返回给java。于是就写了一个工具类。
<强>首先,maven需要加载jython的依赖。工具类代码如下:强>
进口并不知道; 进口java.util.Map; 进口java.util.Properties; 进口org.apache.poi.ss.formula.functions.T; 进口org.python.core.PyFunction; 进口org.python.core.PyInteger; 进口org.python.core.PyObject; 进口org.python.core.PyString; 进口org.python.util.PythonInterpreter;/* * * @ClassName: JythonUtils * @Description:待办事项(jython工具类) * @author: zy * @date: * * @Copyright: 2018公司。保留所有权利。 *注意: */公开课JythonUtils {/* * * @Title: jythonInit * @Description:待办事项(初始化jython) * @param: @return * @return: PythonInterpreter * @throws */公共静态PythonInterpreter jythonInit () {//初始化网站配置 属性道具=new属性(); props.put (“python。家”、“”);//python自由或jython自由,根据系统中该文件目录路径 props.put (“python.console。编码”、“utf - 8”); props.put (“python.security。respectJavaAccessibility”、“假”); props.put (“python.import。网站”,“假”); 属性preprops=System.getProperties (); PythonInterpreter。初始化(preprops,道具,新字符串[0]);//创建PythonInterpreter对象 PythonInterpreter插值函数=new PythonInterpreter (); 返回插值函数; }/* * * @Title: loadPythonFile * @Description:待办事项(加载python源码文件,) * @param: @param插值函数 * @param: @param filePath,比如:F: \ \ jpython_jar \ \ jpythonTest \ \ pythonTest。py或/testpython/test.py * @param: @return * @return: PythonInterpreter * @throws */公共静态PythonInterpreter loadPythonFile (PythonInterpreter插值函数,字符串filePath) { interp.execfile (filePath); 返回插值函数; }/* * * @Title: loadPythonFunc * @Description:待办事项(加载python源码文件中的某个方法) * @param: @param插值函数 * @param: @param functionName * @param: @return * @return: PyFunction * @throws */公共静态PyFunction loadPythonFunc (PythonInterpreter插值函数,字符串functionName) {//加载方法 PyFunction func=(PyFunction) interp.get (functionName PyFunction.class); 返回函数; }/* * * @Title: execFunc * @Description:待办事项(执行无参方法,返回PyObject) * @param: @param func * @return: PyObject * @throws */公共静态PyObject execFunc (PyFunction func) { PyObject pyobj=func.__call__ (); 返回pyobj; }/* * * @Title: execFuncToString * @Description:待办事项(执行无参方法,返回一个字符串) * @param: @param func * @param: @return * @return:字符串 * @throws */公共静态字符串execFuncToString (PyFunction func) { PyObject pyobj=execFunc(函数); 返回(String) pyobj.__tojava__ (String.class); }/* * * @Title: execFuncToString * @Description:待办事项(执行有参方法,返回一个字符串) * @param: @param func * @param: @param paramName,参数名 * @param: @return * @return:字符串 * @throws */公共静态字符串execFuncToString2 (PyFunction func,字符串paramName) { PyObject pyobj=函数。__call__(新PyString (paramName)); 返回(String) pyobj.__tojava__ (String.class); }/* * * @Title: execFuncToInteger * @Description:待办事项(执行无参方法,返回一个整数) * @param: @param func * @param: @return * @return:整数 * @throws */公共整数execFuncToInteger (PyFunction func) { PyObject pyobj=execFunc(函数); 返回(整数)pyobj.__tojava__ (Integer.class); }/* * * @Title: execFuncToList * @Description:待办事项(执行无参方法,返回一个列表) * @param: @param func * @param: @return * @return: List* @throws */公共List execFuncToList (PyFunction func) { PyObject pyobj=execFunc(函数); 返回(List ) * @param: @param func * @param: @return * @return: Map<字符串,Object> * @throws */公共Map<字符串,Object>execFuncToMap (PyFunction func) { PyObject pyobj=execFunc(函数); 返回(Map<字符串,Object>) pyobj.__tojava__ (Map.class); } 公共空间execFuncToByParamsList (PyFunction func List Java与Python之间使用jython工具类实现数据交互