繁体   English   中英

使用Java运行时命令未运行

[英]Command is not running while running using java

我想使用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);
            }

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

但是,当我尝试以相同的方式找到我的ubuntu的Java版本时。 该代码未返回任何内容,因为br.readline为空。 我是亚伯找出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版本。

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

参考: 为什么“ java -version”进入stderr?

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

您应该能够通过“ java.version ”系统属性获取Java版本号。

例:

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

输出:

1.8.0_51

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM