我在使用ProcessBuilder执行java代码时遇到了问题。
以下是我遇到错误的代码情景。
方案-1
String[] commands = {"cd C:\\glm","glm"};
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(commands);
InputStream stdin = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(stdin);
BufferedReader br = new BufferedReader(isr);
String line = null;
System.out.println("<OUTPUT>");
while ( (line = br.readLine()) != null)
System.out.println(line);
执行代码后 错误
Exception in thread "main" java.io.IOException: Cannot run program "cd C:\glm": CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1047)
at java.lang.Runtime.exec(Runtime.java:617)
at java.lang.Runtime.exec(Runtime.java:485)
at com.glm.GLM_Command.main(GLM_Command.java:15)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:385)
at java.lang.ProcessImpl.start(ProcessImpl.java:136)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1028)
在上面的代码之后,我尝试使用以下代码
方案-2
File thisFile = new File("C:\\somefile.txt");
ProcessBuilder pb = new ProcessBuilder("C:\\glm\\glm.exe");
pb.redirectErrorStream(true);
pb.redirectError(thisFile);
pb.start();
上述代码的输出如图所示
方案-3
棘手的部分是通过命令提示符执行命令:
输出如下图所示
我的任务是读取命令提示符中的数据。
最后
方案-4
public static void main(String[] args) throws Exception
{
Process p = Runtime.getRuntime().exec("C:\\glm\\glm");
// Process p = Runtime.getRuntime().exec("cmd /c dir");
inheritIO(p.getInputStream(), System.out);
inheritIO(p.getErrorStream(), System.err);
}
private static void inheritIO(final InputStream src, final PrintStream dest)
{
new Thread(new Runnable()
{
public void run()
{
Scanner sc = new Scanner(src);
while (sc.hasNextLine())
{
dest.println(sc.nextLine());
}
}
}).start();
}
输出如下所示
请告诉我我哪里错了。注意:我们一直在提供手册中的命令:)。 (如果没有其他解决方案,在获取解决方法的文件中之前是否有任何方法可以读取所有值?)。