ITEEDU

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: 
// 选项错误处理或其它处理 
} 

以上是命令列自变量处理时的大致流程,当然不同的程序会有不同的处理方式,不过大致上不离以上的架构。