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);
 }
}
締め括りをつける
以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に対して一定の参考学習価値を持ってほしいです。ありがとうございます。もっと知りたいなら、下のリンクを見てください。