2016-09-23 320 views
1

我有我的主類兩個輸入參數,如:如何在執行jar時提供參數值?

public static void main(String[] args) throws IOException, JSONException, ParseException { 

    DataFromES df = new DataFromES(); 
    String year = ""; 
    String[] month = {""}; 

    for (String m : month) { 
     df.receiveData(year,m); 

    } 

    System.out.println("Excel Generated"); 
} 

我已經生成的jar爲我的項目。但是,在通過CMD執行時,如何將值傳遞給jar相當不確定。我已經意識到如何將參數傳遞給jar,但不清楚如何將值傳遞給上述兩個Strings

+2

'year = args [0];'? – SomeJavaGuy

+0

來自命令行的參數存儲在args中主要類 – Jens

回答

1

爲避免重蹈覆轍,您應該考慮使用像Apache Commons CLI這樣的庫,它可以爲您正確解析您的命令。

public static void main(final String[] args) { 
    Options options = new Options(); 
    options.addOption(
     Option.builder("y") 
      .required(true) 
      .hasArg(true) 
      .desc("The year") 
      .longOpt("year") 
      .build() 
    ); 
    options.addOption(
     Option.builder("m") 
      .required(true) 
      .desc("The months") 
      .numberOfArgs(Option.UNLIMITED_VALUES) 
      .longOpt("month") 
      .build() 
    ); 
    CommandLineParser parser = new DefaultParser(); 
    CommandLine cmd; 
    try { 
     cmd = parser.parse(options, args); 
    } catch (ParseException e) { 
     System.err.println("Could not parse the command due to: " + e.getMessage()); 
     HelpFormatter formatter = new HelpFormatter(); 
     formatter.printHelp("java", options); 
     return; 
    } 
    String year = cmd.getOptionValue("y"); 
    String[] months = cmd.getOptionValues("m"); 
    // Rest of your code here 
} 

然後,您將能夠在今年的情況下,使用-y--year,並在幾個月的情況下,使用-m--month提供你的論點。在解析錯誤的情況下,該用法也將被打印。


如果你想要做手工(假設你有在今年第一,隨後的幾個月裏),你的代碼將爲:

public static void main(final String[] args) { 
    if (args.length < 2) 
     throw new IllegalStateException("Not enough arguments"); 
    String year = args[0]; 
    String[] months = new String[args.length - 1]; 
    System.arraycopy(args, 1, months, 0, months.length); 
    ... 
} 

但是,我們應該增加更多的測試,以確保參數總數是正確的,參數是有效的,這就是我建議使用庫的原因。

+0

解釋是現貨。 – Kulasangar

1

裏面你main()方法,你需要聲明你的2個變量:

public static void main(String[] args) { 
    String year = args[0]; 
    String month = args[1]; 

    .... your treatment ... 
} 

因此,通年作爲第一個參數和每月第二;)

+0

中的數組使第二個參數成爲:String [] month = args [1] .split(「,」)並且工作正常。 :) – Kulasangar

1

您可以使用java命令參數傳遞成參數,就像這樣:

java -cp jar-name.jar complete-class-name "2016" "08" 

和你這樣的代碼:

String year = args[0]; 
String month = args[1]; 
相關問題