2016-07-30 98 views
0

我正在解决一个问题,即需要程序允许用户使用-d命令行选项设置参数。 java是否提供了使用-d选项传递参数的机制?我找不到任何,所以我正在解释,就好像命令行选项值是-d,这意味着用户想要输入下一个参数。在java中传递-d选项

if (args[0].equals("-d")) 
{ 
    parameter = args[0]; 
} 

这是正确的方法来检查?有没有更好的方法来检查用户是否输入了-d选项? java是否提供了其他一些机制?

+0

使用命令行参数解析器。 [JCommander](http://jcommander.org/)(无隶属关系)是我的首选 - 还有其他人。 –

+0

然后'parameter =“-d”'或者'null' - 是你想要的吗?以Apache Commons CLI为例,和http://stackoverflow.com/questions/10745811/how-to-use-terminal-arguments-with-values-in-java –

回答

1

如果有人使用./yourapp something else -d运行程序该怎么办? 现在参数-d存在,但不在位置0

所以,我的建议是循环所有的参数,并检查你需要什么。

int i; 
boolean dParam = false; 
for (i = 0; i < args.length; i++) { 
    if (args[i].equals("-d")) { 
     dParam = true; 
    } 
} 

如果你想在-d后,用户输入的东西,像一个文件名,那么我会推荐这样做:

int i; 
boolean dParam = false; 
String dParamValue; 

for (i = 0; i < args.length; i++) { 
    if (args[i].equals("-d")) { 
     dParam = true; 
     dParamValue = args[++i]; 
    } 
} 
+0

这开始看起来很像重新发明轮子。你最好的方式是最多... –

+0

这不是重新发明车轮。这是OP的初始代码的更新版本。 – Ibrahim

0

传递给正在运行的程序的所有参数,会在应用程序通过量参数字串[] args的主要方法..

然后,您可以检查字典是有要求的,由只检查如果参数数组包含键..

例子:

public static void main(String[] args) { 
System.out.println("is dictionary there?: " + Arrays.asList(args).contains("d")); 

if (Arrays.asList(args).contains("d")) { 
    prepateDictionary(); 
}else { 
    prepareSomethingElse(); 
} 

} 
1

我认为需求意味着-D(首都之一),而不是-d。这些选项用于将附加参数传递给java。例如,-Dmy.option=value。在这种情况下,您可以通过System类访问此属性:

String myOption = System.getProperty("my.option");