我在使用哈工大分词LTP二进制版本
命令如下
ltp_test --input C:\Users\admin\Desktop\test2.txt --segmentor-lexicon C:\Users\admin\Desktop\dict.txt>C:\Users\admin\Desktop\cs4.xml
就算直接调用ltp_test 也现实系统找不到指定的文件
我应该才能正常的调用呢?
package demo;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class JavaCMD {
public static void main(String[] args) {
String cmd = "ltp_test";
Runtime run = Runtime.getRuntime();//返回与当前 Java 应用程序相关的运行时对象
try {
Process p = run.exec(cmd);// 启动另一个进程来执行命令
BufferedInputStream in = new BufferedInputStream(p.getInputStream());
BufferedReader inBr = new BufferedReader(new InputStreamReader(in));
String lineStr;
while ((lineStr = inBr.readLine()) != null)
//获得命令执行后在控制台的输出信息
System.out.println(lineStr);// 打印输出信息
//检查命令是否执行失败。
if (p.waitFor() != 0) {
if (p.exitValue() == 1)//p.exitValue()==0表示正常结束,1:非正常结束
System.err.println("命令执行失败!");
}
inBr.close();
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
带上完整路径试试看
感觉Process p = run.exec(cmd)这句有问题
你运行的系统环境支持“ltp_test“这个命令?
你在cmd中执行,是随便任意目录都可以执行吗? 还是要到特定的目录去执行? 从报错来看, 应该是要到特定的目录去执行吧,
你在cmd中输入这么命令看看能不能执行。你可能没有把这个程序的所在目录放入环境变量。
如果你把ltptest这个程序所在路径放入了环境变量,而且cmd中能够调用,那么java中这样肯定可以调用的。
如果你觉得改环境变量麻烦,那么你需要先cd到那个程序所在目录。
比如说,那个ltp-test的位置是D:/test/ltp_test.exe,那么在cmd中输入:
D:
cd test
ltp_test --input C:\Users\admin\Desktop\test2.txt --segmentor-lexicon C:\Users\admin\Desktop\dict.txt>C:\Users\admin\Desktop\cs4.xml
如果这样可以调用成功,说明就是环境变量的问题了。
如果你已经加入环境变量了,但是在java里还是调用失败,可以考虑Runtime.exec()其他形式的几个函数,他们很多都可以设置工作目录的,总有一个适合你的。