土曜日, 3月 11, 2017

Apache Commons CLI: Java でコマンドライン処理

JavaをWindows上で使うのはだからちょっとした障壁をクリアせねばなりません。この種の困難は「世界市場を独占するマイクロソフトへモノを言っているんだ」ぐらいのノリで立ち向かう必要があります。

ですからJavaでコンソールアプリってのはどうしても多少の困難を覚悟せねばなりません。コマンドライン処理など想定されていないわけです。

プロパティファイルで初期化パラメタを設定なる方法がありますが、昔ながらの伝統的スタイルを継承し、クラシックなノリでコマンドライン引数なるものを使うとプロパティなどというものを使わずまるでUnix/Linux/Gnuのコマンドのようなプログラムが書けます。

ここは外部ライブラリを使うのがオススメです。Apache Commons CLI を使う方法を示します。

public static void main(String args[]) {
Options opt = new Options();
try {
opt.addOption("?", OPTION_HELP, false, "print this message");
Option option = Option.builder("f").required(true).longOpt(OPTION_FILE).hasArgs().desc("file name").build();
opt.addOption(option);
Option dirOption = Option.builder("d").required(true).longOpt(OPTION_DIR).hasArgs().desc("target directory")
.build();
opt.addOption(dirOption);
CommandLineParser parser = new DefaultParser();
CommandLine cmd = parser.parse(opt, args);
if (cmd.hasOption(OPTION_HELP)) {
throw new Exception();
} else if (cmd.hasOption(OPTION_DIR) && cmd.hasOption(OPTION_FILE)) {
String dir = cmd.getOptionValue(OPTION_DIR);
String fileName = cmd.getOptionValue(OPTION_FILE);
new FindFile(fileName, dir);
}else{
throw new Exception();
}
} catch (Exception e) {
HelpFormatter help = new HelpFormatter();
help.printHelp("DirList", opt, true);
}
}

Qt: 外部プログラムを起動する

  Qt/C++ のアプリは、外部へ直接アクセスできます。これはネットアプリでは不可能な Qt のメリットです。 外部プログラムを起動することもできます。QProcess::startDetached() を使うと独立したプロセスを立ち上げることができます。 この QProces...