2016-09-23 52 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]; 
相关问题