使用 exec() 在 Java 中使用 linux 命令调用时遇到困难
Having a hard time with linux command calls in Java with exec()
我正在尝试使用 Runtime.getRuntime().exec() 来调用一个程序,就好像它是从终端调用的一样,但它只是在读取第一个文件后崩溃并出现致命错误。
在终端我运行命令如下:
mace4 -c -f inputFile.in > outputFile.out
它按预期工作,从第一个文件读取并在第二个文件中输出。
在 Java 中,我尝试 运行 这样:
String args[] = new String[]{"mace4", "-c", "-f", inputFileName ,">",outputFileName};
try {
String s;
Process proc = Runtime.getRuntime().exec(args, null, new File("/home/user/workDirectory/"));
BufferedReader br = new BufferedReader(
new InputStreamReader(proc.getInputStream()));
while ((s = br.readLine()) != null)
System.out.println("line: " + s);
proc.waitFor();
proc.destroy();
一旦程序到达第一个文件的末尾,它就会抛出:
致命错误:read_all_input,文件 > 未找到
这个程序太旧了,我似乎找不到找到更详细的错误的方法..
我尝试用这些参数调用它 {"sh or bash", "-c", "mace4", "-c ", "-f", inputFileName ,">",outputFileName} 这使得程序 运行 然后冻结(或者至少控制台中没有任何显示)..
我是否调用了终端命令错误?如果是,我应该更改什么?
PS: 这是我的第一个问题,如果我遗漏了什么,对不起..
您似乎在尝试使用 Bash 输出重定向运算符 >
。这会将您的程序的输出重定向 运行 一个文件(或另一个程序)
This answer 解释了如何使用 ProcessBuilder 执行此操作,它应该适用于您在此处尝试执行的操作。
例如:
ProcessBuilder pb = new ProcessBuilder("mace4", "-c", "-f", inputFileName);
pb.redirectOutput(new File(outputFileName));
Process p = pb.start();
我正在尝试使用 Runtime.getRuntime().exec() 来调用一个程序,就好像它是从终端调用的一样,但它只是在读取第一个文件后崩溃并出现致命错误。
在终端我运行命令如下:
mace4 -c -f inputFile.in > outputFile.out
它按预期工作,从第一个文件读取并在第二个文件中输出。
在 Java 中,我尝试 运行 这样:
String args[] = new String[]{"mace4", "-c", "-f", inputFileName ,">",outputFileName};
try {
String s;
Process proc = Runtime.getRuntime().exec(args, null, new File("/home/user/workDirectory/"));
BufferedReader br = new BufferedReader(
new InputStreamReader(proc.getInputStream()));
while ((s = br.readLine()) != null)
System.out.println("line: " + s);
proc.waitFor();
proc.destroy();
一旦程序到达第一个文件的末尾,它就会抛出:
致命错误:read_all_input,文件 > 未找到
这个程序太旧了,我似乎找不到找到更详细的错误的方法..
我尝试用这些参数调用它 {"sh or bash", "-c", "mace4", "-c ", "-f", inputFileName ,">",outputFileName} 这使得程序 运行 然后冻结(或者至少控制台中没有任何显示).. 我是否调用了终端命令错误?如果是,我应该更改什么?
PS: 这是我的第一个问题,如果我遗漏了什么,对不起..
您似乎在尝试使用 Bash 输出重定向运算符 >
。这会将您的程序的输出重定向 运行 一个文件(或另一个程序)
This answer 解释了如何使用 ProcessBuilder 执行此操作,它应该适用于您在此处尝试执行的操作。
例如:
ProcessBuilder pb = new ProcessBuilder("mace4", "-c", "-f", inputFileName);
pb.redirectOutput(new File(outputFileName));
Process p = pb.start();