在Java

时间:2019-04-11 10:02:10

标签: java windows cmd process

我正在尝试获取与Java中的文件类型关联的exe。我通过启动一个执行assoc的cmd进程并尝试捕获其输出来实现此目的。现在这是哪里出了问题,我得到了以下几行,但没有其他内容:

Microsoft Windows [Version 10.0.17134.648]
(c) 2018 Microsoft Corporation. All rights reserved.

这是我的代码:

        String[] commands = {"cmd", "assoc .txt"};
        final ProcessBuilder pb = new ProcessBuilder(commands);
        Process pr = pb.start();
        pr.getOutputStream().close();

        BufferedReader errorReader = new BufferedReader(new InputStreamReader(pr.getErrorStream()));

        BufferedReader stdIn = new BufferedReader(new InputStreamReader(pr.getInputStream()));

        String s;
        while((s = stdIn.readLine()) != null) {
            System.out.println(s);
        }

        String error;
        while((error = errorReader.readLine()) != null) {
            System.out.println(error);
        }

1 个答案:

答案 0 :(得分:0)

您的问题可能是您使用BufferedReader.readLine()。这等待换行符,您的进程可能不会发送该换行符。 另外,您在一个线程中运行所有内容,这可能会妨碍您捕获输出。 看看https://examples.javacodegeeks.com/core-java/lang/processbuilder/java-lang-processbuilder-example/

上的 3。