Java:将命名和未命名参数的组合传递给可执行的Jar / Main方法

时间:2014-07-22 15:47:19

标签: java arguments main

我正在寻找一种方法,以便我们可以将命名和未命名的参数传递给main方法。目前我正在传递它们如下

 java -jar myJar param1 param2 param3

并将其作为

处理
  public static void main( String[] args ) throws IOException
  {
    String param1 = args[0];
    String param2=args[1];
     .....

我必须能够发送它们并在Java中处理它们,以便我可以根据它们的名称读取值,并且每次执行Main方法时都不需要以相同的顺序传递参数。我可以使用一些外部库来使我的工作更轻松。

我想发送下面的参数并在java main中处理它

   java -jar myJar param3name=param3 param2name=param2 param1name=param1 param5 param6

我希望将它们作为下面的内容处理

     public static void main( String[] args ) throws IOException
  {
    //something like
    String param3 = getvaluemethod("param3name");
    String param1 = getvaluemethod("param1name");
     .....
    String Param5 =args[n]
    String param6 = args[n+1]
     .....

我已经看过这个link并且不全面。关于如何完成任务的任何输入?

3 个答案:

答案 0 :(得分:5)

Apache Commons CLI是我用来解析java命令行参数的方法。示例可以找到here,可用于执行以下任何选项格式:

  • POSIX like options(即tar -zxvf foo.tar.gz
  • GNU就像长期选项(即du --human-readable --max-depth=1
  • 类似Java的属性(即java -Djava.awt.headless=true -Djava.net.useSystemProxies=true Foo
  • 附加值的短期权(即gcc -O2 foo.c
  • 单个连字符的长选项(即。ant -projecthelp

答案 1 :(得分:3)

基于@Mac70的回答和一些补充,

private static Map<String, String> map;
private static void makeMap(String[] args) {
    map = new HashMap<>();
    for (String arg : args) {
        if (arg.contains("=")) {
            //works only if the key doesn't have any '='
            map.put(arg.substring(0, arg.indexOf('=')),
                    arg.substring(arg.indexOf('=') + 1));
        }
    }
}

public static void main(String[] args) {
    makeMap(args);

    //.. 
    String param3 = map.get("param3name");
    String param1 = map.get("param1name");
}

如果您需要任何广泛的内容,您需要查看@Archangel33的答案。

答案 2 :(得分:1)

只要params和名称不包含空格 - 您可以获取所有这些空格,以“=”键拆分并将键/值对添加到HashMap。稍后您可以使用密钥获得您想要的任何值。

编辑:如果您不想向地图添加一些元素,那么如果这些元素不包含“=”键,您可以忽略它们。