我從一個處理給定XML文件並提取純文本的Eclipse項目構建了一個可運行的JAR。但是,該版本要求在代碼中對文件進行硬編碼。將命令行參數傳遞給可運行的JAR
有沒有辦法做這樣的事情
java -jar wiki2txt enwiki-20111007-pages-articles.xml
,並有罐子上的XML文件執行?
我已經做了一些四處尋找,所有的例子都是在命令行上編譯JAR,而沒有涉及傳入參數。
我從一個處理給定XML文件並提取純文本的Eclipse項目構建了一個可運行的JAR。但是,該版本要求在代碼中對文件進行硬編碼。將命令行參數傳遞給可運行的JAR
有沒有辦法做這樣的事情
java -jar wiki2txt enwiki-20111007-pages-articles.xml
,並有罐子上的XML文件執行?
我已經做了一些四處尋找,所有的例子都是在命令行上編譯JAR,而沒有涉及傳入參數。
爲什麼不呢?
只需修改您的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
你可以在命令行上傳遞程序參數,並讓他們在你的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");
....
}
以這種方式運行應用程序時,java可執行文件讀取您的jar中的MANIFEST並查找您定義的主類。在這個類中你有一個名爲main的靜態方法。在這種方法中,您可以使用命令行參數。
您還可以在命令行上設置Java屬性(即環境變量),並在代碼中的任意位置輕鬆使用它。
的命令行將做這種方式:
C:/> Java的罐子-Dmyvar = enwiki-20111007-頁-articles.xml wiki2txt
和Java代碼訪問值如下:
String context = System.getProperty("myvar");
看到關於argument passing in Java的這個問題。
Java屬性不是一個環境變量。他們可以達到同樣的目的,但他們是不同的事物。 – devdanke
感謝您的澄清。只有以前我不得不爲Java程序輸入參數的時候都是通過eclipse-only執行的。它們都不是獨立產品,我也沒有意識到同樣的原則是成立的。 – Jason
爲什麼「InputStream inputStream = MyClass.class.getResourceAsStream(args [0]);」不行? –
@ArthurEirich這聽起來像是一個不同的問題。打印你的「args [0]」..如果輸出正確的值,那麼你可以成功地將命令行參數傳遞給jar文件。 – Kal