在使用主控台启动一个Java程序时,我们可以一并指定一些参数,以让程序进行相对应的功能,例如:
$java 类别名称 -compare a.java b.java
像这样的功能,您可以使用命令列自变量(Command line argument)来达到,在我们撰写主程序时,会在自变量列撰写String[] args,它就是用来接受一个自变量指定的字符串数组,您只要使用索引取出args中的元素值,就可以取出程序运行时的参数,下面这个程序是个简单的示范:
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来改写上面的程序:
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: // 选项错误处理或其它处理 }
以上是命令列自变量处理时的大致流程,当然不同的程序会有不同的处理方式,不过大致上不离以上的架构。