public class hiArgs extends Object
単純なコマンド引数の解析もオプションが増えると結構面倒なものです。
例えば次のようなコマンド形式があったとして
形式
COM {file} [-a aName] [-b bName] {-c cName1} [-dopt] [-eopt]
例
COM -a AA -c CC1 -c CC2 file-1 file-2
;この例では-bは省略して、-cは2個、指定無しの引数が2個あります。
String args[]をなめて情報を取り出すのは大変です。
public void main(String[] args){
hiArgs arg = new hiArgs(args);
String aName = arg.argStr("-a",null);
String bName = arg.argStr("-b","bDefault");
String[] cNames = arg.argStrs("-c");
boolean dopt = arg.argBool("-dopt",true);
boolean eopt = arg.argBool("-eopt",false);
String[] err = arg.otherStartsWith("-");
String[] files = arg.other();
注意:ver 1.36までの版では、一度読み取ったパラメタは2度読みできず、
2度読みが必要な場合{#reset()}が必要となる仕様としていました。
1.37以降は何度でも読み出せる仕様に変更しました。
同じ名前のオプションが複数ある場合はこれまでは一度読んだパラメタ
は読み込まないため、一つずつ複数回に分けて読み込む
ことが可能でしたが、1.37以降では{#argStrs(String)}を用いて1回で
読み取るようにしてください。
| 修飾子とタイプ | クラスと説明 |
|---|---|
static interface |
hiArgs.Helper
解析エラーで呼ばれhelpメッセージを出す.
|
| コンストラクタと説明 |
|---|
hiArgs(String[] args_)
コマンド引数をセットする
|
hiArgs(String[] args_,
hiArgs.Helper helper_)
コマンド引数をセットする
|
| 修飾子とタイプ | メソッドと説明 |
|---|---|
void |
allow_duplicate(boolean flag_)
全ての引数の重複可指定.
|
void |
allow_duplicate(String... keys_)
重複可.
|
boolean |
argBool(String option_)
boolオプションを取得する.
|
boolean |
argBool(String option_,
boolean default_)
boolオプションを取得する.
|
double |
argDouble(String key_)
doubleの引数値を得ます.見つからない場合は例外またはhelper呼び出しとなります.
|
double |
argDouble(String key_,
double default_)
doubleの引数値を得ます.
|
int |
argInt(String key_)
intの引数値を得ます.見つからない場合は例外またはhelper呼び出しとなります.
|
int |
argInt(String key_,
int default_)
intの引数値を得ます.
|
long |
argLong(String key_)
longの引数値を得ます.見つからない場合は例外またはhelper呼び出しとなります.
|
long |
argLong(String key_,
long default_)
longの引数値を得ます.
|
static String[] |
args(String[] args_)
antの引数args対応のためのインターフェース(廃棄予定)
|
static String[] |
args(String[] args_,
long option_)
antの引数args対応のためのインターフェース(廃棄予定)
|
String |
argStr(String option_)
文字列オプションを取得する.
|
String |
argStr(String option_,
String default_)
文字列オプションを取得する.
|
String[] |
argStrs(String option_)
文字列オプション並びを取得する.
|
String[] |
argStrs(String option_,
String[] default_)
文字列オプション並びを取得する.
|
boolean |
check()
引数の内検出にかからなかったものがあればhelpを呼ぶまたはfalseを返す.
|
boolean |
check(int exit_code_)
引数の内検出にかからなかったものがあればhelpを呼ぶまたはfalseを返す
エラーがあった場合メッセージ出力後System.exit(1)でexit()します。
|
boolean |
check(String help_key_)
引数の内検出にかからなかったものがあればhelpを呼ぶまたはfalseを返す.
|
boolean |
check(String help_key_,
int exit_code_)
引数の内検出にかからなかったものがあればhelpを呼ぶまたはfalseを返す.
|
void |
co_deny_each(String... keys_)
共存を許さないオプション.
|
void |
co_deny_except(String key_,
String... keys_)
共存を許さないオプション.
|
void |
co_deny(String key_,
String... keys_)
共存を許さないオプション.
|
static String |
diff(Object default_,
Object changed_)
構造体の差分を引数の形で表す.
|
static String |
diff(Object default_,
Object changed_,
long option_)
構造体の差分を引数の形で表す.
|
static String |
diff(Object default_,
Object changed_,
String check_)
構造体の差分を引数の形で表す.
|
static String |
diff(Object default_,
Object changed_,
String check_,
long option_)
構造体の差分を引数の形で表す.
|
HashMap<String,String> |
getValueTo(Class<?> dst_class_)
static要素を取得.
|
HashMap<String,String> |
getValueTo(Class<?> dst_class_,
long option_)
static要素を取得.
|
HashMap<String,String> |
getValueTo(Class<?> dst_class_,
String ignore_)
static要素を取得
構造体のstatc要素名と同じ名前のプロパティー値を構造体内に取り込みます。
|
HashMap<String,String> |
getValueTo(Class<?> dst_class_,
String ignore_,
long option_)
static要素を取得
構造体のstatc要素名と同じ名前のプロパティー値を構造体内に取り込みます。
|
HashMap<String,String> |
getValueTo(Object dst_obj_)
構造体の要素に要素名の前に"-"を付けた名前のデータを取得する.
|
HashMap<String,String> |
getValueTo(Object dst_obj_,
long option_)
構造体の要素に要素名の前に"-"を付けた名前のデータを取得する.
|
HashMap<String,String> |
getValueTo(Object dst_obj_,
String ignore_)
構造体の要素に要素名の前に"-"を付けたデータを取得する.
|
HashMap<String,String> |
getValueTo(Object dst_obj_,
String ignore_,
long option_)
構造体の要素に要素名の前に"-"を付けたデータを取得する.
|
void |
help(String msg_)
セットしてあるusageを出す.
|
void |
help(String msg_,
int exit_code_)
セットしてあるusageを出す.
|
void |
need_at_least(String key_,
String... keys_)
必要とするオプション.
|
void |
need(String key_,
String other_key_)
必要とするオプション.
|
String[] |
other()
引数の内、これまでの検出に使われなかったものを返す.
|
String[] |
other(String param_name_,
int min_,
int max_)
引数の内、これまでの検出に使われなかったものを返す.
|
String[] |
otherStartsWith(String str_)
引数の内指定の文字列で始まるものを返す.
|
void |
reset()
読み取ったものを全て再読取り可能にする.
|
void |
setHelper(hiArgs.Helper helper_)
ヘルパーをセットする.
|
void |
setUsage(String[] usage_)
エラー時に表示するusage文字列をセットする.
|
void |
setUsage(String[] usage_,
PrintStream ps_)
エラー時に表示するusage文字列と出力先をセットする.
|
void |
setUsage(String[] usage_,
PrintWriter pw_)
エラー時に表示するusage文字列と出力先をセットする.
|
String |
toString()
内容ダンプ.
|
public hiArgs(String[] args_)
args_ - コマンド引数public hiArgs(String[] args_, hiArgs.Helper helper_)
args_ - コマンド引数helper_ - helpを表示する機能を持つインスタンスpublic void setHelper(hiArgs.Helper helper_)
helper_ - ヘルパーpublic void setUsage(String[] usage_)
class MyClass{
static String[] usage={
"PARAMETERS:"
," file [-encoding charSet] [-line #][-mark char2]"
};
public static void main(String args_){
hiArgs _args=new hiArgs(args_);
_args.setUsage(usage);
String _charSet= _args.argStr("-encoding","utf-8");
int _line = _args.argInt("-line",0);
String _mark = _args.argStr("-mark",null);
String[] _file = _args.other("file",1,1); // 必ず1個必要
_args.check("-help"); // 不明オプション、指定不足、-help指定時にhelpを出す
//...
}
//...
}
usage_ - usage文字列public void setUsage(String[] usage_, PrintStream ps_)
usage_ - usage文字列ps_ - 出力先(System.out等)public void setUsage(String[] usage_, PrintWriter pw_)
usage_ - usage文字列pw_ - 出力先public void help(String msg_)
メッセージ出力後System.exit(1)でexitします。
msg_ - 表示するメッセージpublic void help(String msg_, int exit_code_)
msg_ - 表示するメッセージexit_code_ - System.exit()に与えるコード。0の場合exitしないpublic void co_deny(String key_, String... keys_)
key_ - このキーは後ろで指定されるキーと共存できないkeys_ - 先頭のキーと共存できないpublic void co_deny_except(String key_, String... keys_)
key_ - このキーは後ろで指定されるキー以外と共存できないkeys_ - 先頭のキーと共存できるキーpublic void co_deny_each(String... keys_)
keys_ - このキーは互いに共存できないpublic void need(String key_, String other_key_)
key_ - このキーは後ろで指定されるキーを必要とするother_key_ - このキーを先頭のキーは必要とするpublic void need_at_least(String key_, String... keys_)
key_ - このキーは後ろで指定されるキーのいずれかを必要とするkeys_ - このキーのいずれかを先頭のキーは必要とするpublic void allow_duplicate(String... keys_)
keys_ - これらキーの重複を許すpublic void allow_duplicate(boolean flag_)
flag_ - true:重複を許可、false:重複を許さない(デフォルト)public int argInt(String key_, int default_)
key_ - キーdefault_ - デフォルト値public int argInt(String key_)
key_ - キーpublic double argDouble(String key_, double default_)
key_ - キーdefault_ - デフォルト値public double argDouble(String key_)
key_ - キーpublic long argLong(String key_, long default_)
key_ - キーdefault_ - デフォルト値public long argLong(String key_)
key_ - キーpublic String argStr(String option_, String default_)
オプション指定に続き文字列がある形式の文字列部を取得します
コマンド引数
command -opt1 aaa -opt2 "BBB"
プログラム
hiArgs arg = new hiArgs(args);
String opt1 = arg.argStr("-opt1","default-1");
String opt2 = arg.argStr("-opt2","default-2");
option_ - オプション文字列default_ - デフォルト値public String argStr(String option_)
オプション指定に続き文字列がある形式の文字列部を取得します。
ない場合はエラーとなりhelperが設定されているとhelperを呼び出した後例外を投げます。
helperが設定されていない場合例外を投げます。
コマンド引数
command -opt1 aaa -opt2 "BBB"
プログラム
hiArgs arg = new hiArgs(args);
String opt1 = arg.argStr("-opt1");
option_ - オプション文字列public String[] argStrs(String option_)
オプション指定に続き文字列がある形式の文字列部を取得します
コマンド引数
command -opt1 aaa -opt1 "BBB"
プログラム
hiArgs arg = new hiArgs(args);
String[] opt1 = arg.argStrs("-opt1");
option_ - オプション指定文字列public String[] argStrs(String option_, String[] default_)
オプション指定に続き文字列がある形式の文字列部を取得します。
コマンド引数
command -opt1 aaa -opt1 "BBB"
プログラム
hiArgs arg = new hiArgs(args);
String[] opt1 = arg.argStrs("-opt1",null);
option_ - オプション指定文字列default_ - デフォルトpublic boolean argBool(String option_, boolean default_)
オプション指定文字列だけのパラメタを検出する。
検出した場合デフォルト値を反転した値が返ります。
コマンド引数
command -aa
プログラム
hiArgs arg = new hiArgs(args);
boolean aa = arg.argBool("-aa",false); // true
boolean naa = arg.argBool("-aa",true); // false
boolean bb = arg.argBool("-bb",false); // false
boolean nbb = arg.argBool("-bb",true); // true
option_ - オプション指定文字列default_ - デフォルト値public boolean argBool(String option_)
オプション指定文字列だけのパラメタを検出する。
検出した場合真、検出しない場合偽が返ります。
コマンド引数
command -aa
プログラム
hiArgs arg = new hiArgs(args);
boolean aa = arg.argBool("-aa"); // true
boolean bb = arg.argBool("-bb"); // false
option_ - オプション指定文字列public String[] otherStartsWith(String str_)
引数の内、これまでの検出に使われなかったものの内
指定の文字列で始まるものを返します。
主に"-"を指定して不正引数のチェックに使います。
String[] err= args.otherStartsWith("-");
if( err.length!=0 ) hiU.err.println("unknown option "+err[0]);
str_ - 文字列public String[] other()
public String[] other(String param_name_, int min_, int max_)
param_name_ - 時にHelperに渡す名前min_ - 最少数(これ以上の数が必要)max_ - 最多数 (これ以下の数である必要がある)public boolean check()
エラーがあった場合メッセージ出力後System.exit(1)でexit()します。
public boolean check(int exit_code_)
エラーがあった場合メッセージ出力後System.exit(1)でexit()します。
exit_code_ - System.exit()に渡すコード。0の場合はexit()しないpublic boolean check(String help_key_)
指定キー(例えば-helpなど)がある場合、または引数の内検出にかからなかったものある場合usageを出力します。
エラーがあった場合メッセージ出力後System.exit(1)でexit()します。
help_key_ - ヘルプ用のキーpublic boolean check(String help_key_, int exit_code_)
指定キー(例えば-helpなど)がある場合、または引数の内検出にかからなかったものがある場合usageを出力します。
エラーがあった場合メッセージ出力後指定codeでSystem.exit()します。0を指定するとexitしません。
help_key_ - ヘルプ用のキーpublic void reset()
hiArgsは1度読み取ったものは2度読みされません。
hiArgs arg = new hiArgs(args);
String opt1 = arg.argStr("-param",null);
String opt2 = arg.argStr("-param",null);// -paramは既に読み取られている
// のでnullになる
arg.reset(); // 再読取り可能にする
String opt3 = arg.argStr("-param",null);// opt1と同じものが得られる
public HashMap<String,String> getValueTo(Object dst_obj_)
構造体の要素名と同じ名前のプロパティー値を構造体内に取り込みます。
dst_obj_ - 取り出し先の実体public HashMap<String,String> getValueTo(Object dst_obj_, long option_)
構造体の要素名と同じ名前のプロパティー値を構造体内に取り込みます。
dst_obj_ - この構造体に情報を取り出すoption_ - オプションpublic HashMap<String,String> getValueTo(Object dst_obj_, String ignore_)
構造体の要素名と同じ名前のプロパティー値を構造体内に取り込みます。
dst_obj_ - この構造体に情報を取り出すignore_ - 無視する名前の並びpublic HashMap<String,String> getValueTo(Object dst_obj_, String ignore_, long option_)
構造体の要素名と同じ名前のプロパティー値を構造体内に取り込みます。
dst_obj_ - この構造体に情報を取り出すignore_ - 無視する名前の並びoption_ - オプションpublic HashMap<String,String> getValueTo(Class<?> dst_class_)
構造体の要素名と同じ名前のプロパティー値を構造体内に取り込みます。
dst_class_ - 取り出し先のクラス定義public HashMap<String,String> getValueTo(Class<?> dst_class_, long option_)
構造体のstatic要素名と同じ名前のプロパティー値を構造体内に取り込みます。
dst_class_ - 取り出し先のクラス定義option_ - オプションpublic HashMap<String,String> getValueTo(Class<?> dst_class_, String ignore_)
構造体のstatc要素名と同じ名前のプロパティー値を構造体内に取り込みます。
idst_class_ - 取り出し先のクラス定義ignore_ - 無視する名前の並びpublic HashMap<String,String> getValueTo(Class<?> dst_class_, String ignore_, long option_)
構造体のstatc要素名と同じ名前のプロパティー値を構造体内に取り込みます。
dst_class_ - 取り出し先のクラス定義ignore_ - 無視する名前の並びoption_ - オプションpublic static String diff(Object default_, Object changed_, String check_, long option_)
与えられる2つの同一クラス実体の要素の差分を起動パラメタ風に表します。
default_ - 基本となるデータchanged_ - 変更が加わったデータcheck_ - 選択的にチェックする要素名並び、または無視する要素名並び(先頭に!)option_ - オプションpublic static String diff(Object default_, Object changed_, String check_)
与えられる2つの同一クラス実体の要素の差分を起動パラメタ風に表します。
default_ - 基本となるデータchanged_ - 変更が加わったデータcheck_ - 選択的にチェックする要素名並び、または無視する要素名並び(先頭に!)public static String diff(Object default_, Object changed_)
与えられる2つの同一クラス実体の要素の差分を起動パラメタ風に表します。
default_ - 基本となるデータchanged_ - 変更が加わったデータpublic static String diff(Object default_, Object changed_, long option_)
与えられる2つの同一クラス実体の要素の差分を起動パラメタ風に表します。
default_ - 基本となるデータchanged_ - 変更が加わったデータoption_ - オプション