Linux のコマンドライン引数の用に、
オプションを取得するライブラリです。
下記のURLから、ダウンロードできます。
これは、Linux で使用されている C言語のライブラリの Java 移植版です。
import gnu.getopt.Getopt;
import gnu.getopt.LongOpt;
public class OptionTest
{
public static void main(String[] argv)
{
// ---------------------------------------------------------
// 引数処理用の変数を宣言
// ---------------------------------------------------------
LongOpt[] longopts = new LongOpt[7]; // Long Option 用
StringBuffer sb = new StringBuffer(); // Long Option 用(単語)
String arg = ""; // Long Option の引数
// ---------------------------------------------------------
// 引数の処理を開始
// ---------------------------------------------------------
longopts[0] = new LongOpt("debug", LongOpt.NO_ARGUMENT, null, 'd'); // 値を持たない
longopts[1] = new LongOpt("filename", LongOpt.REQUIRED_ARGUMENT, null, 'f'); // このオプションは必ず値を持つ
longopts[2] = new LongOpt("outname", LongOpt.REQUIRED_ARGUMENT, null, 'o'); // このオプションは必ず値を持つ
longopts[3] = new LongOpt("ambiguous", LongOpt.OPTIONAL_ARGUMENT, null, 'a'); // 値を持っても持たなくてもよい(もし指定されても取得できない)
longopts[4] = new LongOpt("XXX", LongOpt.NO_ARGUMENT, sb, 'X'); // 値を持たない
longopts[5] = new LongOpt("YYY", LongOpt.REQUIRED_ARGUMENT, sb, 'Y'); // このオプションは必ず値を持つ
longopts[6] = new LongOpt("ZZZ", LongOpt.OPTIONAL_ARGUMENT, sb, 'Z'); // 値を持っても持たなくてもよい(もし指定されても取得できない)
// 引数を取得(LongOpt指定のものも、文字指定を行うこと)
// コロンが存在するか否かで値の指定が必須かを表す
// ${X} -> 値は持たない
// ${X}: -> 引数を取る(数値でも文字でもどちらでも良い)
// ※ このソースでは、n: のみ単一文字指定となる
Getopt go = new Getopt( new OptionTest().getClass().getName(), argv, "df:o:a:n:", longopts);
int c;
while( (c = go.getopt()) != -1)
{
switch(c)
{
// ---------------------------------------------------------
// Long Option のみ ※Long Option に StringBuffer指定時は、go.getopt()は0を返す
// ---------------------------------------------------------
case 0:
// ---------------------------------------------------------
// --XXX
// ---------------------------------------------------------
if( 'X' == (char)(new Integer(sb.toString())).intValue())
{
arg = go.getOptarg();
System.out.println("引数指定 XXX が指定されました");
System.out.println("XXX : " + ((arg != null) ? arg : "null"));
break;
}
// ---------------------------------------------------------
// --YYY
// ---------------------------------------------------------
if( 'Y' == (char)(new Integer(sb.toString())).intValue())
{
arg = go.getOptarg();
System.out.println("引数指定 YYY が指定されました");
System.out.println("YYY : " + ((arg != null) ? arg : "null"));
break;
}
// ---------------------------------------------------------
// --ZZZ
// ---------------------------------------------------------
if( 'Z' == (char)(new Integer(sb.toString())).intValue())
{
arg = go.getOptarg();
System.out.println("引数指定 ZZZ が指定されました");
System.out.println("ZZZ : " + ((arg != null) ? arg : "null"));
break;
}
break;
// ---------------------------------------------------------
// --debug(LongOpt) -d(GetOpt)
// ---------------------------------------------------------
case 'd':
arg = go.getOptarg();
System.out.println("引数指定 debug が指定されました");
break;
// ---------------------------------------------------------
// -n (GetOpt) ※数値指定
// ---------------------------------------------------------
case 'n':
System.out.println("引数指定 n が指定されました");
System.out.println("n :" + Integer.parseInt(go.getOptarg()));
break;
// ---------------------------------------------------------
// --filename(LongOpt) -f(GetOpt)
// ---------------------------------------------------------
case 'f':
System.out.println("引数指定 f が指定されました");
System.out.println("f :" + go.getOptarg());
break;
// ---------------------------------------------------------
// --outname(LongOpt) -o(GetOpt)
// ---------------------------------------------------------
case 'o':
System.out.println("引数指定 o が指定されました");
System.out.println("o :" + go.getOptarg());
break;
// ---------------------------------------------------------
// --ambiguous(LongOpt) -a(GetOpt)
// ---------------------------------------------------------
case 'a':
System.out.println("引数指定 ambiguous が指定されました");
break;
default:
System.err.println("引数指定がありません");
System.out.println("default :" + c);
}
}
}
}
最終更新:2012年10月26日 00:12