国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

Java與Python之間使用jython工具類實現數據交互

2024-07-14 08:43:56
字體:
來源:轉載
供稿:網友

最近有個功能需要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); }}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。如果你想了解更多相關內容請查看下面相關鏈接


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 威远县| 繁峙县| 炎陵县| 奉节县| 武夷山市| 出国| 蕉岭县| 浑源县| 普洱| 抚州市| 北流市| 巴林左旗| 哈尔滨市| 巴彦县| 崇州市| 宁津县| 嵊泗县| 黄浦区| 民乐县| 桓台县| 台南市| 汝南县| 临澧县| 吉木萨尔县| 姚安县| 瑞安市| 壤塘县| 陈巴尔虎旗| 菏泽市| 长乐市| 新宁县| 徐汇区| 中宁县| 临澧县| 舒兰市| 湟中县| 黑河市| 通许县| 南召县| 肇庆市| 汉寿县|