使用ProcessBuilder从命令提示符读取时出错

时间:2016-06-08 11:16:47

标签: java processbuilder

我在使用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();

上述代码的输出如图所示

enter image description here

方案-3

棘手的部分是通过命令提示符执行命令:

输出如下图所示

enter image description here

我的任务是读取命令提示符中的数据。

最后

方案-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();
    }

输出如下所示

enter image description here

请告诉我我哪里错了。

注意:我们一直在提供手册中的命令:)。 (如果没有其他解决方案,在获取解决方法的文件中之前是否有任何方法可以读取所有值?)。

0 个答案:

没有答案