我正在编写一个命令行java应用程序并计划使用库来解析命令行选项。 我想把多个文件名作为输入。
现在我选择了apache commons-cli(1.2)。 我的主要方法如下
public static void main(String[] args) {
Options options = new Options();
options.addOption("s", "source", true, "file(s) as input");
CommandLineParser parser = new GnuParser();
CommandLine input = null;
try{
input = parser.parse(options, args);
}catch (ParseException e){
new HelpFormatter().printHelp("Usage: ", options);
System.exit(1);
}
String [] files = null;
if(input.hasOption("s")){
files = input.getOptionValues("s");
}
}
现在我用参数"-s /home/keshava/file1 /home/keshava/file2"
执行程序
我在文件数组中只得到一个文件。
我知道我可以通过"-s /home/keshava/file1 -s /home/keshava/file2"
获取多个文件
但我不想这样做。
有没有办法以任何方式指定值分隔符? 任何其他图书馆建议也可以。
谢谢, Keshava
答案 0 :(得分:0)
如果有人仍在寻找答案,您可以通过使用setArgs()
方法指定给定选项支持的最大值数来获取数组中的多个值。
Options options = new Options();
Option option = new Option("s", "source", true, "file(s) as input");
// Let option s take up to 5 arguments
option.setArgs(5);
options.addOption(option);
当最大值数没有固定限制时,setArgs()
方法也接受Option.UNLIMITED_VALUES
。
答案 1 :(得分:0)
如果使用OptionBuilder
,方法hasArgs()
可以应用于构建器,可选择使用限制。如果没有指定限制,它将使用Option.UNLIMITED_VALUES
。
// Unlimited
options.addOption(OptionBuilder.withArgName("file(s)").hasArgs().withLongOpt("files").create("f"));
// Limit to 5
options.addOption(OptionBuilder.withArgName("file(s)").hasArgs(5).withLongOpt("files").create("f"));