gpt4 book ai didi

java - 获取 Java 运行时参数 --argumentName=argumentValue

转载 作者:行者123 更新时间:2023-11-29 04:20:22 26 4
gpt4 key购买 nike

我需要运行一个程序,其中以形式传递运行时参数,

--argumentName=argumentVaue

我需要在如下所示的主函数中获取这些值,

public class TestArguments {

public static void main(String[] args) {

System.out.println(System.getProperty("argumentA"));
System.out.println(System.getProperty("argumentB"));
System.out.println(System.getProperty("argumentC"));
System.out.println(System.getProperty("argumentD"));

for(int i=0; i<args.length; i++) {
System.out.println("Argument " + i + " equals " + args[i]);
}

}

}

当我查看 args 中的值时我只得到一个大字符串,例如 --argumentA=foo .我可以只做一个 string.split("=") 来将名称与值分开,但这似乎不是一种通过名称获取参数值的优雅方式。我以为System.getProperty("argumentName")可以解决问题,但值始终为 null .我正在通过这样的 jar 运行我的程序 java -cp "myProgram.jar" com.foo.bar.TestArguments --argumentA=a --argumentB=b --argumentC=c--argumentD=d .

最佳答案

实际上,您在开始上课后传递程序参数时传递它们:

"java -cp myProgram.jar" com.foo.bar.TestArguments --argumentA=a --argumentB=b --argumentC=c--argumentD=d.

System.getProperty(String) 方法允许检索系统属性,这是另一回事。这就是您不使用此方法检索程序参数的原因。

System 属性是系统(操作系统)的属性。
您可以通过将它们作为 JVM 参数(而不是程序参数)传递来传递/创建它们,并在您的程序中更轻松地检索它们:

java -DargumentA=a -DargumentB=b -DargumentC=c -DargumentD=d -cp 
"myProgram.jar" com.foo.bar.TestArguments

但是绕过系统属性以简化程序特定参数的检索是相当具有误导性的。

因此,请保留您的程序参数,而不是拆分 String 参数,而是使用 API 来做到这一点。
Arg4J实现它非常好。

就这么简单:

import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
import org.kohsuke.args4j.Option;
import org.kohsuke.args4j.OptionHandlerFilter;

public class TestArguments {

@Option(name = "--argumentA", usage = "...")
private String argumentA;

@Option(name = "--argumentB", usage = "...")
private String argumentB;

@Option(name = "--argumentC", usage = "...")
private String argumentC;

@Option(name = "--argumentD", usage = "...")
private String argumentD;

public static void main(String[] args) throws IOException {
new TestArguments().doMain(args);
// run the logic of the program
}

public void doMain(String[] args) throws IOException {
CmdLineParser parser = new CmdLineParser(this);

try {
// parse the arguments.
parser.parseArgument(args);
} catch (CmdLineException e) {
System.err.println(e.getMessage());
parser.printUsage(System.err);
return;
}
}
}

关于java - 获取 Java 运行时参数 --argumentName=argumentValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49677972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com