本示例为一个webservice项目,需要在其中调用C++写的可执行程序。可执行程序及其配置文件放在了src文件夹下的cplus包内。示例中的C++程序名为Data_Trans.exe 本可执行程序可以通过命令行调用。在后面通过空格间隔 带两个日期型字符串作为参数。
代码如下:
package com.stalvan; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; public class IDemoImpl implements IDemo { @Override public String queryCityInfo(String beginTime, String endTime) { String result = "数据获取失败"; StringBuilder cmdBuilder = new StringBuilder(); String dir = this.getClass().getClassLoader().getResource("/").getPath()+"cplus"; String exePath = dir + "/Data_Trans.exe"; cmdBuilder.append(exePath); cmdBuilder.append(" "); cmdBuilder.append(beginTime); cmdBuilder.append(" "); cmdBuilder.append(endTime); try { result = exeCmd(cmdBuilder.toString(),dir); } catch (IOException e) { e.printStackTrace(); } return result; } private String exeCmd(String commandStr,String dir) throws IOException { String result = ""; BufferedReader br = null; try { Process p = Runtime.getRuntime().exec(commandStr,null,new File(dir)); br = new BufferedReader(new InputStreamReader(p.getInputStream())); String line = null; StringBuilder sb = new StringBuilder(); while ((line = br.readLine()) != null) { sb.append(line + "\n"); } result = sb.toString(); } catch (IOException e) { e.printStackTrace(); throw e; } finally { if (br != null) { try { br.close(); } catch (Exception e) { e.printStackTrace(); } } } return result; } }
其中的 Process p = Runtime.getRuntime().exec(commandStr,null,new File(dir));
这个方法的最后一个参数为exe文件的工作目录。如果exe文件需要读取自己的配置文件。在未指定最后一个参数的情况下,可能会找不到配置文件。