Java ライブラリ 第一回

  • GetOpt の使用方法

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