2016-07-30 97 views
0

我正在解決一個問題,即需要程序允許用戶使用-d命令行選項設置參數。 java是否提供了使用-d選項傳遞參數的機制?我找不到任何,所以我正在解釋,就好像命令行選項值是-d,這意味着用戶想要輸入下一個參數。在java中傳遞-d選項

if (args[0].equals("-d")) 
{ 
    parameter = args[0]; 
} 

這是正確的方法來檢查?有沒有更好的方法來檢查用戶是否輸入了-d選項? java是否提供了其他一些機制?

+0

使用命令行參數解析器。 [JCommander](http://jcommander.org/)(無隸屬關係)是我的首選 - 還有其他人。 –

+0

然後'parameter =「-d」'或者'null' - 是你想要的嗎?以Apache Commons CLI爲例,和http://stackoverflow.com/questions/10745811/how-to-use-terminal-arguments-with-values-in-java –

回答

1

如果有人使用./yourapp something else -d運行程序該怎麼辦? 現在參數-d存在,但不在位置0

所以,我的建議是循環所有的參數,並檢查你需要什麼。

int i; 
boolean dParam = false; 
for (i = 0; i < args.length; i++) { 
    if (args[i].equals("-d")) { 
     dParam = true; 
    } 
} 

如果你想在-d後,用戶輸入的東西,像一個文件名,那麼我會推薦這樣做:

int i; 
boolean dParam = false; 
String dParamValue; 

for (i = 0; i < args.length; i++) { 
    if (args[i].equals("-d")) { 
     dParam = true; 
     dParamValue = args[++i]; 
    } 
} 
+0

這開始看起來很像重新發明輪子。你最好的方式是最多... –

+0

這不是重新發明車輪。這是OP的初始代碼的更新版本。 – Ibrahim

0

傳遞給正在運行的程序的所有參數,會在應用程序通過量參數字串[] args的主要方法..

然後,您可以檢查字典是有要求的,由只檢查如果參數數組包含鍵..

例子:

public static void main(String[] args) { 
System.out.println("is dictionary there?: " + Arrays.asList(args).contains("d")); 

if (Arrays.asList(args).contains("d")) { 
    prepateDictionary(); 
}else { 
    prepareSomethingElse(); 
} 

} 
1

我認爲需求意味着-D(首都之一),而不是-d。這些選項用於將附加參數傳遞給java。例如,-Dmy.option=value。在這種情況下,您可以通過System類訪問此屬性:

String myOption = System.getProperty("my.option");