2011-11-14 201 views
24

我從一個處理給定XML文件並提取純文本的Eclipse項目構建了一個可運行的JAR。但是,該版本要求在代碼中對文件進行硬編碼。將命令行參數傳遞給可運行的JAR

有沒有辦法做這樣的事情

java -jar wiki2txt enwiki-20111007-pages-articles.xml 

,並有罐子上的XML文件執行?

我已經做了一些四處尋找,所有的例子都是在命令行上編譯JAR,而沒有涉及傳入參數。

回答

29

爲什麼不呢?

只需修改您的Main-Class即可接收參數並根據參數採取行動。

public class wiki2txt { 

    public static void main(String[] args) { 

      String fileName = args[0]; 

      // Use FileInputStream, BufferedReader etc here. 

    } 
} 

指定命令行中的完整路徑。

java -jar wiki2txt /home/bla/enwiki-....xml 
+0

感謝您的澄清。只有以前我不得不爲Java程序輸入參數的時候都是通過eclipse-only執行的。它們都不是獨立產品,我也沒有意識到同樣的原則是成立的。 – Jason

+0

爲什麼「InputStream inputStream = MyClass.class.getResourceAsStream(args [0]);」不行? –

+0

@ArthurEirich這聽起來像是一個不同的問題。打印你的「args [0]」..如果輸出正確的值,那麼你可以成功地將命令行參數傳遞給jar文件。 – Kal

4

你可以在命令行上傳遞程序參數,並讓他們在你的Java應用程序是這樣的:

public static void main(String[] args) { 
    String pathToXml = args[0]; 
.... 
} 

或者您可以通過命令行改變通過系統屬性java -Dpath-to-xml=enwiki-20111007-pages-articles.xml -jar wiki2txt

和您的主要類爲:

public static void main(String[] args) { 
    String pathToXml = System.getProperty("path-to-xml"); 
.... 
} 
0

以這種方式運行應用程序時,java可執行文件讀取您的jar中的MANIFEST並查找您定義的主類。在這個類中你有一個名爲main的靜態方法。在這種方法中,您可以使用命令行參數。

26

您還可以在命令行上設置Java屬性(即環境變量),並在代碼中的任意位置輕鬆使用它。

的命令行將做這種方式:

C:/> Java的罐子-Dmyvar = enwiki-20111007-頁-articles.xml wiki2txt

和Java代碼訪問值如下:

String context = System.getProperty("myvar"); 

看到關於argument passing in Java的這個問題。

+3

Java屬性不是一個環境變量。他們可以達到同樣的目的,但他們是不同的事物。 – devdanke

相關問題