使用 CLI 處理命令行
發(fā)表時(shí)間:2024-01-07 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]編寫處理命令行參數(shù)的代碼并不是一件很令人興奮的事,但是有時(shí)候依然有必要這樣做。在下次需要分析命令行參數(shù)并且事情有點(diǎn)復(fù)雜的時(shí)候,可不要忘了可信賴的開放源代碼 Java 工具箱,并使用命令行接口(CLI,Command Line Interface)! Jakarta Commons 負(fù)責(zé) CLI...
編寫處理命令行參數(shù)的代碼并不是一件很令人興奮的事,但是有時(shí)候依然有必要這樣做。在下次需要分析命令行參數(shù)并且事情有點(diǎn)復(fù)雜的時(shí)候,可不要忘了可信賴的開放源代碼 Java 工具箱,并使用命令行接口(CLI,Command Line Interface)。
Jakarta Commons 負(fù)責(zé) CLI 項(xiàng)目。雖然說如果只有一兩個(gè)參數(shù)使用它就顯得大材小用,但是如果你的應(yīng)用程序從命令行接受很多設(shè)置參數(shù)的話,它就是很必要的。
要使用 CLI,你需要?jiǎng)?chuàng)建 Options 類的一個(gè)實(shí)例:
Options opt = new Options();
使用 Options 的這個(gè)實(shí)例可以定義應(yīng)用程序接受的命令行參數(shù)。定義命令行參數(shù)的一個(gè)方法是使用 Options 類的addOption() 方法。對應(yīng)用程序可接受的每個(gè)選項(xiàng)調(diào)用一次這個(gè)方法。
opt.addOption("h", false, "Print help for this application");
opt.addOption("u", true, "The username to use");
opt.addOption("dsn", true, "The data source to use");
在定義好類的參數(shù)之后,創(chuàng)建一個(gè)CommandLineParser,然后解析傳遞給 main 方法的 String 數(shù)組。
BasicParser parser = new BasicParser();
CommandLinecl = parser.parse(opt, args);
現(xiàn)在所有的參數(shù)都已被解析,你就可以分析由解析器返回的CommandLine實(shí)例來確定用戶提供的參數(shù)和值了。
if ( cl.hasOption('h') ) {
HelpFormatter f = new HelpFormatter();
f.printHelp("OptionsTip", opt);
}
else {
System.out.println(cl.getOptionValue("u"));
System.out.println(cl.getOptionValue("dsn"));
}
從上面的代碼可以看到,你可以使用HelpFormatter類自動(dòng)地為程序生成用法信息。
下面是完整的代碼:
// OptionsTip.java
import org.apache.commons.cli.BasicParser;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.ParseException;
public class OptionsTip {
public static void main(String args[]) {
try {
Options opt = new Options();
opt.addOption("h", false, "Print help for this application");
opt.addOption("u", true, "The username to use");
opt.addOption("dsn", true, "The data source to use");
BasicParser parser = new BasicParser();
CommandLinecl = parser.parse(opt, args);
if ( cl.hasOption('h') ) {
HelpFormatter f = new HelpFormatter();
f.printHelp("OptionsTip", opt);
}
else {
System.out.println(cl.getOptionValue("u"));
System.out.println(cl.getOptionValue("dsn"));
}
}
catch (ParseException e) {
e.printStackTrace();
}
}
}