Java - 在程序启动替代期间将参数作为键值对传递

时间:2016-11-15 16:51:42

标签: java arguments

我希望有人可以帮我这个...这是一个新手问题,但不幸的是我有点被困在这里。

目前我正在启动我的java应用程序,如(cmd):

现在这是所有类路径之后的调用部分。

%JAVA_HOME%bin \ java.exe -cp%CLASSPATH%;%SCRIPTROOT%jar * -XX:MaxPermSize = 1024M view.Main C:\ temp \ MyDatabase C:\ TEMP \ myfile.xml中

第一个arg: C:\ TEMP \ MyDatabase的

第二个arg: C:\ TEMP \ myfile.xml中

public static void init(String[] args){

    try {
        mydatabase = args[0];
    } catch (Exception ex) {
    }

    try {
        myfile = args[1];
    } catch (Exception ex) {
    }

}

现在在这种情况下,参数的顺序是相关的。 只有两个参数,这可能就好了,但是我应该做什么,如果我有10个参数,其中一些是可选的?这将是一个问题,对吗?

如果我做这样的事情怎么办? %JAVA_HOME%bin \ java.exe -cp%CLASSPATH%;%SCRIPTROOT%jar * -XX:MaxPermSize = 1024M view.Main database:/ C:\ temp \ MyDatabase myfile:/ C:\ TEMP \ myfile.xml中

现在在我的代码中,顺序将不再重要,因为我喜欢参数的“键值对”,并且键标识了值的实际“使用”。这有效,但感觉不对。

有更好的方法吗? 也许像 java.exe 一样用 -cp 来做?如果是,我该如何实现呢?

谢谢。

1 个答案:

答案 0 :(得分:1)

您需要java.util.Properties。 将它们传递给java进程添加-D

java -jar my-app.jar -Dfile=C:\temp\MyFile.xml -Ddatabase=C:\temp\MyDatabase

现在订单无所谓。使用System.getProperties()静态方法获取args,它还有卫星System.getPropery(String key)System.getPropery(String key, Object default)

对于高级选项,请查看Apache Commons CLI和类似的库。