手工处理参数
当应用程序的命令行语法很简单时,完全在自定义代码中执行命令参数处理是合理的。
在这个例子中,我们将介绍一系列简单的案例研究。在每种情况下,如果参数不可接受,代码将产生错误消息,然后调用 System.exit(1)
告诉 shell 命令失败。 (我们将在每种情况下假设使用名称为 myapp
的包装器调用 Java 代码。)
没有参数的命令
在本案例研究中,该命令不需要参数。该代码说明 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 <arg1> <arg2>");
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":
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] [ <arg> ...]");
System.exit(1);
}
}
如你所见,如果命令语法复杂,处理参数和选项会相当麻烦。建议使用命令行解析库; 看其他例子。