使用java运行时命令未运行

时间:2016-07-15 10:12:23

标签: java ubuntu terminal

我想使用java程序

在Termninal(Ubuntu)中运行命令

在网上冲浪后,我找到了使用java执行命令的方法

以下是在ubuntu中找到ldd版本的代码

String[] command = { "ldd", "--version" };
            ProcessBuilder probuilder = new ProcessBuilder(command);
            Process process = probuilder.start();
            InputStream is = process.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String line;
            process.waitFor();

            // System.out.println(br.readLine());
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }

在上面的代码中,我试图找出" ldd verison"在ubuntu中使用java。哪个工作正常我得到了ldd版本。

但是当我试图以同样的方式找到我的ubuntu的java版本时。 代码没有返回任何内容,因为br.readline为null。我很高兴找到ldd vesion,为什么不是java版本?

以下是使用java在ubuntu中查找java版本的代码

String[] command = { "java", "-version" };

    ProcessBuilder probuilder = new ProcessBuilder(command);
    Process process = probuilder.start();

    InputStream is = process.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
    String line;
    process.waitFor();

    // System.out.println(br.readLine());
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }

请帮助我找一些如何在ubuntu中使用java代码找到java版本。

1 个答案:

答案 0 :(得分:2)

不幸的是,这是Java的实现方式。看来Java的-version选项通过stderr打印而不是通常的stdout

<强>参考: Why does 'java -version' go to stderr?

这种现象解释了为什么你的子进程运行命令,但似乎所有东西都是通过stderr通道打印的,看起来你没有执行命令失败但是当你通过process.getErrorStream()转储错误流时你看到了而是版本文本。

您应该能够通过&#39; java.version &#39;来获取Java版本号。系统属性。

示例:

System.out.println( System.getProperty("java.version") );

<强>输出:

  

1.8.0_51

您可能对可以打印的其他Java相关属性感兴趣 - 例如运行时和产品构建版本等。

请参阅: http://www.oracle.com/technetwork/java/javase/versioning-naming-139433.html