Парсинг аргументов из консоли с использованием 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;
}
Т.е. уже постфактум делаю обработку и в случае неудачи кидаю ошибку, однако подозреваю, что есть другой, более красивый способ это сделать. Возможно у вас будут идеи?