参数传递—如何在java中将一些命令行参数解析为单个选项

avkwfej4  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(380)

我了解如何使用args4j直接解析命令行字符串和选项。但我找不到如何将几个参数解析为一个选项。我的意思是这样的命令行:

java -jar myprog.jar -i firstFile secondFile thirdFile -o outputFile

所以基本上我想给输入选项传递未定义数量的参数。谢谢。

3bygqnnd

3bygqnnd1#

我想args4j做不到。我不会用args4j,它是。。过时的。
试试jcommander。这是完全相同的想法,但与args4j不同的是,您可以使用jcommander @OptionList<T> . 参见文档的第2.2节(单击链接,转到第2.2节):(p)
不过,请注意,如果我从字面上理解你的问题,你的问题是非常不可取的!
在posix样式的命令行参数中,字符串解析为: -i firstFile -好的,firstfile是-i选项的参数。 secondFile -好吧,这和-i完全无关,这是一个文件参数。 thirdFile -同样的交易。 -o outFile -outfile是-o开关的argvalue。
你大概想要的,以及jcommander的工作方式,是你必须写下: java -jar myprog.jar -i firstFile -i secondFile -i thirdFile -o outFile 如果你真的想 -i firstFile secondFile thirdFile 为了工作,这有点奇怪/不标准,而且当需要非标准的东西时,标准库不太可能为您提供,所以您必须手工编写。我建议你。。稍微改变一下你想要的,使之符合人们的期望,从而获得使用图书馆为你获取信息的好处。
然而,在这个命令行设计的兔子洞里,继续 -i in1 -i in2 -i in3 更好,但仍然不惯用和笨拙。通常的规则是输入通过非开关进行配置。编写命令行的正确方法是:

java -jar myprog.jar -o outFile firstFile secondFile thirdFile

这是怎么回事 zip , curl , ffmpeg , java (可执行文件)本身等全部工作。
args4j和jcommander都可以做到这一点;args4j通过 @Arguments List<String> args; ,jcommander通过 @Parameter .

yfjy0ee7

yfjy0ee72#

对于arg4j,如果您想获得链接到“i”选项的列表,可以使用 StringArrayOptionHandler .
使用此命令行:

java -jar myprog.jar -i firstFile secondFile thirdFile -o outputFile

执行此操作的源代码是:

class Main {

    @Option(name = "-i", handler = StringArrayOptionHandler.class)
    private List<String> files;

    @Option(name = "-o")
    private String outputFile;

    public static void main(String[] args) throws Exception {
        Main bean = new Main();
        CmdLineParser parser = new CmdLineParser(bean);
        parser.parseArgument(args);

        bean.files.stream().forEach(entry -> System.out.println(entry));
        System.out.println(bean.outputFile);
    }
}

相关问题