Java应用程序可以接受任意数量的命令行参数。
这允许用户在启动应用程序时指定配置信息。
启动应用程序时,运行时系统会通过字符串S数组将命令行参数传递给应用程序的主要方法。
使用GWT工具库进行参数处理
如果要解析更复杂的命令行参数,例如,具有可选参数,而不是最好的是使用Google的GWT方法。
处理命令行 myprogram -dir “~/Documents" --port 8888示例:
public class MyProgramHandler extends ToolBase {
protected File dir;
protected int port;
//getters for dir and port
…
public MyProgramHandler() {
this.registerHandler(new ArgHandlerDir() {
@Override
public void setDir(File dir) {
this.dir = dir;
}
});
this.registerHandler(new ArgHandlerInt() {
@Override
public String[] getTagArgs() {
return new String[]{"port"};
}
@Override
public void setInt(int value) {
this.port = value;
}
});
}
public static void main(String[] args) {
MyProgramHandler myShell = new MyProgramHandler();
if (myShell.processArgs(args)) {
//main program operation
System.out.println(String.format("port: %d; dir: %s",
myShell.getPort(), myShell.getDir()));
}
System.exit(1);
}
}
arghandler还有一个方法异常()可以覆盖,以便需要命令行参数(默认返回是假的,以便参数是可选的。
手工处理参数
当应用程序的命令行语法很简单时,完全用自定义代码处理命令参数是合理的。
没有参数的命令
在本例中,该命令不需要参数。
该代码说明了args.length为我们提供了命令行参数的数量。
public class Main {
public static void main(String[] args) {
if (args.length > 0) {
System.err.println("usage: myapp");
System.exit(1);
}
//Run the application
System.out.println("It worked");
}
}
具有两个参数的命令
在这种情况下,该命令需要精确的两个参数。
public class Main {
public static void main(String[] args) {
if (args.length != 2) {
System.err.println("usage: myapp ");
System.exit(1);
}
//Run the application
System.out.println("It worked: " + args[0] + ", " + args[1]);
}
}
请注意,如果我们忽略检查args.length,则如果用户使用太少的命令行参数运行它,则该命令将崩溃。
具有“flag”选项和至少一个参数的命令
在这种情况下,该命令具有几个(可选)标志选项,并且在选项之后至少需要一个参数。
package tommy;
public class Main {
public static void main(String[] args) {
boolean feelMe = false;
boolean seeMe = false;
int index;
loop: for (index = 0; index < args.length; index++) { String opt = args[index]; switch (opt) { case "-c": seeMe = true; break; case "-f": GoalKicker.com – Java® Notes for Professionals 26 feelMe = true; break; default: if (!opts.isEmpty() && opts.charAt(0) == '-') { error("Unknown option: '" + opt + "'"); } break loop; } } if (index >= args.length) {
error("Missing argument(s)");
}
//Run the application
//…
}
private static void error(String message) {
if (message != null) {
System.err.println(message);
}
System.err.println("usage: myapp [-f] [-c] [ …]");
System.exit(1);
}
}
日期:2020-06-02 22:15:22 来源:oir作者:oir
