Парсинг аргументов из консоли с использованием args4j

Задание заключается в том, что, запарсить полученную информацию из консоли, используя библиотеку args4j.
Собственно вот сам запрос:

java -jar tar.jar [-u filename.txt | file1.txt file2.txt... -out output.txt]

Собственно 2 опции (-u и -out):

@Option(name = "-u", metaVar = "filename.txt", usage = "File name with merged files", forbids = {"-out"})
private String inputFileName = "";
@Option(name = "-out", metaVar = "output.txt", usage = "File name of merged files", forbids = {"-u"})
private String outputFileName = "";

Проблема в том, что помимо опций, у -out должны быть еще и аргументы (file1.txt file2.txt...), однако сколько я не смотрел, так и не смог найти способ указать, что вместе с опцией -out должны быть аргументы.
На данный момент я обрабатываю это таким образом:

@Argument(metaVar = "file1.txt file2.txt...", usage = "File names to merge")
private List<String> inputFileNames = new ArrayList<>();

В функции с вызовом обработки:

CmdLineParser parser = new CmdLineParser(this);
try {
    parser.parseArgument(args);
    if (outputFileName.isEmpty() && !inputFileNames.isEmpty())
        throw new IllegalArgumentException("option \"-u\" does not require arguments");
    if (inputFileName.isEmpty() && inputFileNames.isEmpty())
        throw new IllegalArgumentException("option \"-out\" require arguments");
} catch (CmdLineException | IllegalArgumentException e) {
    System.err.println(e.getMessage());
    System.err.println("java -jar tar.jar [-u filename.txt | file1.txt file2.txt... -out output.txt]");
    parser.printUsage(System.err);
    return;
}

Т.е. уже постфактум делаю обработку и в случае неудачи кидаю ошибку, однако подозреваю, что есть другой, более красивый способ это сделать. Возможно у вас будут идеи?


Ответы (0 шт):