From Gossip@Openhome

Java Gossip: 命令列引數(Command line argument)

在使用主控台啟動一個Java程式時,我們可以一併指定一些參數,以讓程式進行相對應的功能,例如:
$java 類別名稱 -compare a.java b.java

像這樣的功能,您可以使用命令列引數(Command line argument)來達到,在我們撰寫主程式時,會在引數列撰寫String[] args,它就是用來接受一個引數指定的字串陣列,您只要使用索引取出args中的元素值,就可以取出程式運行時的參數,下面這個程式是個簡單的示範:

  • CommandLineArg.java
public class CommandLineArg { 
public static void main(String[] args) {
System.out.print("讀入的引數: ");
for(int i = 0; i < args.length; i++)
System.out.print(args[i] + " ");
System.out.println("");
}
}

執行結果:
$ java CommandLineArg -d /mnt/win_d/sample/
讀入的引數: -d /mnt/win_d/sample/


args索引0的值是從程式名稱後第一個引數開始,以空白為區隔依序儲存在args陣列中,當然,您可以使用 J2SE 5.0 的foreach來改寫上面的程式:
  • CommandLineArg.java
public class CommandLineArg { 
public static void main(String[] args) {
System.out.print("讀入的引數: ");
for(String arg : args)
System.out.print(arg + " ");
System.out.println();
}
}

接下來介紹一些處理命令列引數的技巧,由於命令列引數是儲存在陣列中,取出這些引數的最好方式當然就是使用for迴圈,而我們通常使用一個前導字元, 例如'-'來指定引數的選項功能,由於arg是個字元陣列,自然的您可以使用switch來比對前導字元,例如:
for(String arg : args) {
    switch(arg.charAt(0)) {
        case '-':
            // 處理參數,執行選項,例如-o、-p、-r等等
        default:
            // 執行對應功能
    }
}

在判斷執行選項的case中,您可以進一步檢查第二個字元,例如:
switch(arg.charAt(1)) {
    case 'o':
        // 選項o的處理
        break;
    case 'p':
        // 選項p的處理
        break;
    case 'r':
        // 選項r的處理
        break;
    default:
        // 選項錯誤處理或其它處理
}

以上是命令列引數處理時的大致流程,當然不同的程式會有不同的處理方式,不過大致上不離以上的架構。