今天小编就为大家分享一篇关于Java与Python之间使用jython工具类实现数据交互,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
最近有个功能需要java与python之间的数据交互,java需要把参数传给python,然后python计算的结果返回给java.于是就写了一个工具类.
首先,maven 需要加载jython的依赖.工具类代码如下:import java.util.list;
import java.util.map;
import java.util.properties;
import org.apache.poi.ss.formula.functions.t;
import org.python.core.pyfunction;
import org.python.core.pyinteger;
import org.python.core.pyobject;
import org.python.core.pystring;
import org.python.util.pythoninterpreter;
/**
* @classname: jythonutils
* @description:todo(jython 工具类)
* @author: zy
* @date:
*
* @copyright: 2018 inc. all rights reserved.
* 注意:
*/
public class jythonutils {
/**
* @title: jythoninit
* @description: todo(初始化jython)
* @param: @return
* @return: pythoninterpreter
* @throws
*/
public static pythoninterpreter jythoninit(){
//初始化site 配置
properties props = new properties();
props.put("python.home", ""); //python lib 或 jython lib,根据系统中该文件目录路径
props.put("python.console.encoding", "utf-8");
props.put("python.security.respectjavaaccessibility", "false");
props.put("python.import.site", "false");
properties preprops = system.getproperties();
pythoninterpreter.initialize(preprops, props, new string[0]);
//创建pythoninterpreter 对象
pythoninterpreter interp = new pythoninterpreter();
return interp;
}
/**
* @title: loadpythonfile
* @description: todo(加载python 源码文件,)
* @param: @param interp
* @param: @param filepath ,比如:f:\\jpython_jar\\jpythontest\\pythontest.py 或/testpython/test.py
* @param: @return
* @return: pythoninterpreter
* @throws
*/
public static pythoninterpreter loadpythonfile(pythoninterpreter interp, string filepath){
interp.execfile(filepath);
return interp;
}
/**
* @title: loadpythonfunc
* @description: todo(加载python 源码文件中的某个方法)
* @param: @param interp
* @param: @param functionname
* @param: @return
* @return: pyfunction
* @throws
*/
public static pyfunction loadpythonfunc(pythoninterpreter interp, string functionname){
//加载方法
pyfunction func = (pyfunction) interp.get(functionname,pyfunction.class);
return func;
}
/**
* @title: execfunc
* @description: todo(执行无参方法,返回pyobject)
* @param: @param func
* @return: pyobject
* @throws
*/
public static pyobject execfunc(pyfunction func){
pyobject pyobj = func.__call__();
return pyobj;
}
/**
* @title: execfunctostring
* @description: todo(执行无参方法,返回一个字符串)
* @param: @param func
* @param: @return
* @return: string
* @throws
*/
public static string execfunctostring(pyfunction func){
pyobject pyobj = execfunc(func);
return (string) pyobj.__tojava__(string.class);
}
/**
* @title: execfunctostring
* @description: todo(执行有参方法,返回一个字符串)
* @param: @param func
* @param: @param paramname ,参数名
* @param: @return
* @return: string
* @throws
*/
public static string execfunctostring2(pyfunction func, string paramname){
pyobject pyobj = func.__call__(new pystring(paramname));
return (string) pyobj.__tojava__(string.class);
}
/**
* @title: execfunctointeger
* @description: todo(执行无参方法,返回一个integer)
* @param: @param func
* @param: @return
* @return: integer
* @throws
*/
public integer execfunctointeger(pyfunction func){
pyobject pyobj = execfunc(func);
return (integer) pyobj.__tojava__(integer.class);
}
/**
* @title: execfunctolist
* @description: todo(执行无参方法,返回一个list)
* @param: @param func
* @param: @return
* @return: list<t>
* @throws
*/
public list<t> execfunctolist(pyfunction func){
pyobject pyobj = execfunc(func);
return (list<t>) pyobj.__tojava__(list.class);
}
/**
* @title: execfunctomap
* @description: todo(执行无参方法,返回一个map<string, object>)
* @param: @param func
* @param: @return
* @return: map<string,object>
* @throws
*/
public map<string, object> execfunctomap(pyfunction func){
pyobject pyobj = execfunc(func);
return (map<string, object>) pyobj.__tojava__(map.class);
}
public void execfunctobyparamslist(pyfunction func, list<t> paramslist){
}
public static void main(string[] args){
pythoninterpreter interp = jythoninit();
//文件名
string filepath = "f:\\jpython_jar\\jpythontest\\pythontest.py";
interp = loadpythonfile(interp, filepath);
//函数名
string functionname = "count";
pyfunction func = loadpythonfunc(interp, functionname);
//执行无参方法,返回pyobject
pyobject pyobj = execfunc(func);
//执行无参方法,返回string
string resultstr = execfunctostring(func);
//执行有参方法,返回string
string paramname = "name";
string resultstr2 = execfunctostring2(func, paramname);
}
} 总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对CodeAE代码之家的支持。如果你想了解更多相关内容请查看下面相关链接
原文链接:https://blog.csdn.net/cafebar123/article/details/79394431
|