Java:将命名和未命名参数的组合传递给可执行的Jar / 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] .....
我已经看过这个链接 ,并不全面。 关于如何完成任务的任何输入?
我使用Apache Commons CLI来解析java命令行参数。 示例可以在此处找到,可用于执行以下任何选项格式:
- POSIX之类的选项(即
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
)
基于@Mac70的答案和一些补充,
private static Map 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的答案。
只要参数和名称不包含空格 – 您可以获取所有这些空格,以“=”键拆分并将键/值对添加到HashMap。 稍后您可以使用密钥获得您想要的任何值。
编辑:如果您不想向地图添加一些元素,那么如果这些元素不包含“=”键,则可以忽略它们。