我想有一个动态的方式传递参数到java主方法调用,这是通过命令行(cmd)到一个可运行的JAR文件。目前,我的main()方法接受6个参数,并在调用另一个方法之前将每个参数设置为一个变量。
id喜欢的是一种方式,让用户能够传递5个或更少的参数到命令行,并通过将其设置为null或空字符串(")值来安全地处理遗漏的参数。
例如,如果我运行下面的命令,它应该知道将我没有指定的缺失参数(clientName和outputFolder)设置为空字符串。
java -Xmx1024m -jar MainApp.jar "Summary" **<missing>** "2015-06-07" "https://12345.bp.com/bp/" "c:\Parameters.txt" **<missing>**
下面是我的main方法的代码:
public static void main(String[] args) {
try {
String dType = args[0];
String clientName = args[1];
String cycleString = args[2];
String mspsURL = args[3];
String inputFile = args[4];
String outputFolder = args[5];
System.out.println("**Main Parameters passed**");
for(String x : args) {
System.out.println(x);
}
runLogic(dType, clientName, cycleString,
mspsURL, inputFile, outputFolder);
} catch(Exception ex) {
ex.printStackTrace();
}
}
感谢您的帮助。
例如,假设最后两个是可选的。
String dType = args[0];
String clientName = args[1];
String cycleString = args[2];
String mspsURL = args[3];
String inputFile = (args.length < 4 ? "default inputFile" : args[4]);
String outputFolder = (args.length < 5 ? "default outputFolder" : args[5]);
如果您真正想要的是缺失项目的关键字,您可以这样做:
String dType = (args[0].equals(keyword)?"":arg[0]);
String clientName = (args[1].equals(keyword)?"":arg[1]);
String cycleString = (args[2].equals(keyword)?"":arg[2]);
String mspsURL = (args[3].equals(keyword)?"":arg[3]);
String inputFile = (args[4].equals(keyword)?"":arg[4]);
String outputFolder = (args[5].equals(keyword)?"":arg[5]);
那么你的输入将是:
java -Xmx1024m -jar MainApp.jar "Summary" "keyword" "2015-06-07" "https://12345.bp.com/bp/" "c:\Parameters.txt" "keyword"
否则我将使用Array
类的length
属性。
测试输入数组的长度,并只为这些变量赋值。
的例子:
int i = args.length;
String dType = (i>0?args[0]:""); //Just do this for each argument
i--; //Then reduce counter by 1