我了解如何使用args4j直接解析命令行字符串和选项。但我找不到如何将几个参数解析为一个选项。我的意思是这样的命令行:
java -jar myprog.jar -i firstFile secondFile thirdFile -o outputFile
所以基本上我想给输入选项传递未定义数量的参数。谢谢。
3bygqnnd1#
我想args4j做不到。我不会用args4j,它是。。过时的。试试jcommander。这是完全相同的想法,但与args4j不同的是,您可以使用jcommander @Option 在 List<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 更好,但仍然不惯用和笨拙。通常的规则是输入通过非开关进行配置。编写命令行的正确方法是:
@Option
List<T>
-i firstFile
secondFile
thirdFile
-o outFile
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 .
zip
curl
ffmpeg
java
@Arguments List<String> args;
@Parameter
yfjy0ee72#
对于arg4j,如果您想获得链接到“i”选项的列表,可以使用 StringArrayOptionHandler .使用此命令行:
StringArrayOptionHandler
执行此操作的源代码是:
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); } }
2条答案
按热度按时间3bygqnnd1#
我想args4j做不到。我不会用args4j,它是。。过时的。
试试jcommander。这是完全相同的想法,但与args4j不同的是,您可以使用jcommander
@Option
在List<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
更好,但仍然不惯用和笨拙。通常的规则是输入通过非开关进行配置。编写命令行的正确方法是:这是怎么回事
zip
,curl
,ffmpeg
,java
(可执行文件)本身等全部工作。args4j和jcommander都可以做到这一点;args4j通过
@Arguments List<String> args;
,jcommander通过@Parameter
.yfjy0ee72#
对于arg4j,如果您想获得链接到“i”选项的列表,可以使用
StringArrayOptionHandler
.使用此命令行:
执行此操作的源代码是: