手工處理引數
當應用程式的命令列語法很簡單時,完全在自定義程式碼中執行命令引數處理是合理的。
在這個例子中,我們將介紹一系列簡單的案例研究。在每種情況下,如果引數不可接受,程式碼將產生錯誤訊息,然後呼叫 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);
}
}
如你所見,如果命令語法複雜,處理引數和選項會相當麻煩。建議使用命令列解析庫; 看其他例子。