簡體   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