public class hiProperty extends Object implements Serializable
ファイルに書かれたプロパティ情報を読みとります。
ファイル記述記述例)
 aaa = HAL9000
 odyssey = 2001
プログラム例)
 hiProperty porp=new hiProperty("./property.txt","utf-8");
 String a= prop.getString("aaa","");  // 指定がない場合空
 int    x= prop.getInt("odyssey",-1); // 指定が無い場合-1になる
定義できる値の種類
次の種類の値が定義出来ます。
| 単純型 | 構造を持ちません。 基本的には文字列ですが、 
 | 
| 構造型(辞書型) | 内部に名前付きの要素を持ちます。 要素そのものも構造型が可能です。 構造型はhiPropteryそのもので、内部に構造を持つ型はhiPropertyが辞書を介して階層化したものとなります。 | 
| 配列型 | 内部に要素を名前を持たないリストとして複数持ちます。 | 
コメントと引用符
引用符で囲まれない範囲で、/*から*/まで、および//から行端まではコメントとなります。
2種のコメントは互いをコメントアウトします。
コメント外のダブルクオートからダブルクオートまで、およびシングルクオートからシングルクオートまでは引用文字列となります。
ダブルクオート引用文字列内のシングルクオートおよびシングルクオート内のダブルクオートは単なる文字として扱われます。
引用文字列内の/*、*/、//は単なる文字列となります。
   /*
    コメント
    "コメント"
   */
   // コメント "コメント"
   "/* コメントではない */"
   "// コメントではない"
   "/* コメントではない */
   "// コメントではない
キーと値
定義は行単位でキーと値を=で結ぶ形で行います。
行端が定義の終端であり、;などの終端子は有りません。
=前後の空白、および単純値の後ろの空白は無視されます。
// ここでは空白を_で表しています key1=abc -> key1=「abc」 key2_=___de_f__ -> key2=「def_f」
キー
キーは空白や記号を含まない場合そのまま記述します。
日本語も可能です。
空白や記号を含む場合は引用符で囲みます。
空白を含まないキー = value " 空白や記号=を含むキー" = value2
同一キーでの別定義はエラーとなります。
ただし、既にあるキーを置き換えることは<=を使えばできます。
key1 = abc key1 <= xyx // key1を置き換え。
引用文字列混合値
先頭が引用符で始まる値は「引用文字列混合値」となります。
引用文字列混合値では引用部と通常部が混在した形となります。
引用符の中のコメントはコメントとなりません。
通常部の前後の空白は削除されます。
最終的には引用部の引用符は削除されて解釈されます。
key1=_"_引用部/*not-comm1*/-1"__通常部__/*comm*/_"引用部-2//not-comm2"_通常部2//comm --> 「引用部/*not-comm1*/-1通常部引用部-2//not-comm2通常部2」
引用文字列混合値中の引用文の中では改行などのエスケープ表現が可能です。
| 表記 | 取り扱い | 
| \ | 逆スラッシュ | 
| \n | line-feed | 
| \r | carriage return | 
| \t | tab | 
| \" | double quote single quote文字列の中ではエスケープ不要(あってもよい) | 
| \' | single quote double quote文字列の中ではエスケープ不要(あってもよい) | 
| \に続くuと4桁の16進数 | unicode | 
| \他 | 逆スラッシュ無視 | 
引用文字列混合値の回避と強制
先頭に引用符をおいたものを引用文字列混合値とさせないためには=の代わりに$=を用いるか、空マクロを引用符の前に置きます
$=を使う
key1 $=_"_引用部/*not-comm1*/-1"__通常部__/*comm2*/_"引用部-2//not-comm2"_通常部2// --> 「" 引用部/*not-comm1*/-1" 通常部 "引用部-2//not-comm2" 通常部2」
空マクロを使う
  ${N}=""
  key1=_${N}"_引用部/*not-comm1*/-1"__通常部__/*comm2*/_"引用部-2//not-comm"_通常部2//
  -->「" 引用部/*not-comm1*/-1"  通常部   "引用部-2//not-comm" 通常部2」
コメントの解釈には引用文字列混合は無関係であることに留意してください。
先頭が引用符でなく中間部に引用符を含む行を引用文字列混合値としたい場合は先頭に""を置きます。
key1 = ab "\u3042" d --> 「ab "\u3042" d」 key1 = "" ab "\u3042" d --> 「abあd」
値記述中コメントのエスケープ
値記述内でコメントを通常の文字列扱いするためには空マクロによる分断を行います。
   ${N}=""
   key1 = /${N}*not-comm*/ /${N}/not-comm
   --> /*not-comm*/ //not-comm
行の連結
行の最後に^を置くと、次行に連結して解釈されます。
^の後ろに//コメントがあっても構いません。
A = B , C ^ D = E //A = "B , C D = E"となります L = "L , M ^" N = O // L= "L , M ^" // N = O となります連結に使う文字(行連結子)を変更は特別なマクロ設定(${_LINE_CONNECTOR_}で行うことができます。
 // デフォルト
 A = B , C ^
 , D , E
 //A = "B , C , D , E#となります
 // 行連結子を+に変更する
 {_LINE_CONNECTOR_}=+
 A = B , C +
 , D , E
 D = E *
 
キーのみによる定義
キーのみを置くとboolen値と解釈されます。
キーの前に-を付けるとfalse、付けないとtrueとなります。
key1 // key1=trueと同じ -key2 // key2=falseと同じ
構造
{と}を使って構造を表すことが出来ます。
   key1 = {
      key1_1=abc
      key1_2=xyz
      }
行内で構造を表すことはできません。
   key1 = { key1_1=abc }
   // これは「{ key1_1=abc }」という文字列となる
{のみの定義を行うには引用符で囲みます.
  key1="{"
配列
[と]を使って配列を表すことが出来ます。
   key1 = [
      abc
      xyz
      ]
行内で配列を表すことはできません。
これは[で始まる単純値を配列との衝突なしで記述できることを意味します。
regex= [a-zA-Z]* // [a-zA-Z]*となる
[のみの定義を行うには引用符で囲みます.
key1="["
複数行定義
複数行文字列を<[[行と]]>行の間に置くことができます。
 key=<[[ // 開始(コメント)
 line-1
    line-2 //コメントにはならず値として読まれる
 line-3
 ]]> // 終了(コメント)
 // line-1からline-3の3行が得られる
 //   line-1
 //      line-2 //コメントにはならず値として読まれる
 //   line-3
マクロ
マクロキーを使った単純置き換えが可能です。
${と}で囲まれたキーはマクロキーとなります。キー定義の後、そのキーを参照すれば
内容が展開されます。同じキーを定義するとそれ以降は新しい定義が有効になります。
定義されていない参照は参照名そのままの値となります。
   ${macro1}=ABC
   key1=${macro1}           // key1=ABCと同じ
   key2=${macro1}x${macro1} // key2=ABCxABCと同じ
   key3=${XYZ}              // key3="${XYZ}"と同じ
   ${macro1}=nnn
   key4=${macro1}           // key4=nnnと同じ
既出であればマクロ定義内で他マクロを参照することもできます。
   ${macro1}=ABC
   ${macro2}=${macro1}x${macro1}
   key1     =${macro2}  // key1=ABCxABCと同じ
構造外で定義したものは構造内で参照できますが、 構造型内で定義したものは構造型内でのみ有効です。
   ${macro1}=ABC
   ${macro2}=nnn
   struct1 = {
      ${macro1}=XYZ
      ${macro3}=123
      key1= ${macro1}  // struct1のkey1= XYZ
      key2= ${macro2}  // struct1のkey2= nnn
      key3= ${macro3}  // struct1のkey3= 123
      }
   key4=${macro1} // key4=ABC   struct1での${macro1}定義はstruct1内のみ
   key5=${macro3} // key5="${macro2}" 
キー名やコメントをマクロで置き換えることはできません。
既定義データ参照ができます。
マクロ参照は文字列置き換えですが、既定義データ参照は既に定義されているものを別の名前で再定義する形となります。
既に定義されているものを${定義名}で参照します。
   def_A= {
      name=abc
      val=xyz
      }
   def_X=${def_A} // 既定義データ参照
   は
   def_A= {
      name=abc
      val=xyz
      }
   def_X= {
      name=abc
      val=xyz
      }
   と同じ。
API
| 修飾子とタイプ | クラスと説明 | 
|---|---|
| static class  | hiProperty.FormatException | 
| static class  | hiProperty.IllegalKeyException | 
| static class  | hiProperty.MultipledKeyException | 
| static class  | hiProperty.TypeConflictionException | 
| 修飾子とタイプ | フィールドと説明 | 
|---|---|
| String | _LINE_CONNECTOR_ | 
| static long | SPLIT_OPTIONデフォルトの文字列の行カラム分割オプション. | 
| コンストラクタと説明 | 
|---|
| hiProperty()内容無しのPropertyを得る | 
| hiProperty(BufferedReader br_)指定のリーダーから情報を得る
リーダーから情報を得ます。 | 
| hiProperty(BufferedReader br_,
          long option_)指定のリーダーから情報を得る
リーダーから情報を得ます。 | 
| hiProperty(File file_)指定のPropertyファイルを読む. | 
| hiProperty(File file_,
          long option_)指定のPropertyファイルを読む. | 
| hiProperty(File file_,
          String charSet_)指定のPropertyファイルを読む. | 
| hiProperty(File file_,
          String charSet_,
          long option_)指定のPropertyファイルを読む. | 
| hiProperty(String fileName_)指定のPropertyファイルを読む. | 
| hiProperty(String fileName_,
          long option_)指定のPropertyファイルを読む. | 
| hiProperty(String fileName_,
          String charSet_)指定のPropertyファイルを読む. | 
| hiProperty(String fileName_,
          String charSet_,
          long option_)指定のPropertyファイルを読む. | 
| 修飾子とタイプ | メソッドと説明 | 
|---|---|
| boolean | available()利用可能か | 
| void | check_key(HashSet<String>[] keySet_,
         HashSet<String> unknown_keys_,
         String msg1_,
         String msg2_,
         long option_)このhiPropertyの持つ全キーセットを調べる. | 
| void | check_key(String[] keys_,
         HashSet<String> unknown_keys_,
         String msg1_,
         String msg2_,
         long option_)キーをチェックする. | 
| boolean | containsKey(String key_)指定キーの要素があるか調べる. | 
| String | definedAt() | 
| String | definedAt(int line_) | 
| String | definedAt(String key_) | 
| ArrayList<String[]> | findStringLists(String key_,
               String dlmt_,
               int[] colIndxs_,
               String[] colVals_)指定カラムが指定値である行の並びを得る. | 
| ArrayList<String[]> | findStringLists(String key_,
               String dlmt_,
               int[] colIndxs_,
               String[] colVals_,
               long option_)指定カラムが指定値である行の並びを得る. | 
| ArrayList<String[]> | findStringLists(String key_,
               String dlmt_,
               String[] colNames_,
               String[] colVals_)指定カラムが指定値である行の並びを得る. | 
| HashMap<String,Object> | getAllElements()全要素を得る | 
| HashMap<String,ArrayList<String>> | getArrays()全配列値を得る. | 
| boolean | getBoolean(String key_)指定キーでboolean値を得る. | 
| boolean | getBoolean(String key_,
          boolean def_)指定キーでboolean値を得る. | 
| boolean[] | getBooleanList(String key_,
              String dlmt_)指定デリミタで並べられた指定キーのboolean並びを得る
指定デリミタを挟み並んだ数値列をbooleanの配列として得ます。 | 
| boolean[] | getBooleans(String key_)指定キーのboolean配列を得る. | 
| boolean[] | getBooleans(String key_,
           boolean[] def_)指定キーのboolean配列を得る. | 
| boolean[] | getBooleans(String key_,
           String dlmt_)指定デリミタで並べられた指定キーのboolean並びを得る
指定デリミタを挟み並んだ数値列をbooleanの配列として得ます。 | 
| double | getDouble(String key_)指定キーでdouble値を得る. | 
| double | getDouble(String key_,
         double def_)指定キーでdouble値を得る. | 
| double[] | getDoubleList(String key_,
             String dlmt_)指定デリミタで並べられた指定キーのdouble並びを得る
指定デリミタを挟み並んだ数値列をdoubleの配列として得ます。 | 
| double[] | getDoubles(String key_)指定キーのdouble配列を得る. | 
| double[] | getDoubles(String key_,
          double[] def_)指定キーのdouble配列を得る. | 
| double[] | getDoubles(String key_,
          String dlmt_)指定デリミタで並べられた指定キーのdouble並びを得る
指定デリミタを挟み並んだ数値列をdoubleの配列として得ます。 | 
| ArrayList<Object> | getElements(String key_)指定キーの全要素を得る | 
| int | getInt(String key_)指定キーでint値を得る。 | 
| int | getInt(String key_,
      int def_)指定キーでint値を得る
 | 
| int[] | getIntList(String key_,
          String dlmt_)指定デリミタで並べられた指定キーのint並びを得る
指定デリミタを挟み並んだ数値列をintの配列として得ます。 | 
| int[] | getInts(String key_)指定キーのint配列を得る. | 
| int[] | getInts(String key_,
       int[] def_)指定キーのint配列を得る. | 
| int[] | getInts(String key_,
       String dlmt_)指定デリミタで並べられた指定キーのint並びを得る
指定デリミタを挟み並んだ数値列をintの配列として得ます。 | 
| static HashSet<String>[] | getKeyDef(String[] keys_)許されるキーセットの辞書を作る. | 
| HashMap<String,String> | getKeyLines()キーが定義されたライン番号の一覧をえる | 
| void | getKeyLines(HashMap<String,String> dict_,
           long option_) | 
| HashMap<String,String> | getKeyLines(long option_) | 
| HashMap<String,String> | getMap(String key_)指定の単純構造をHashMapとして受け取る | 
| HashMap<String,String> | getMap(String key_,
      HashMap<String,String> def_)指定の単純構造をHashMapとして受け取る. | 
| String | getString(String key_)指定キーで文字列値を得る。 | 
| String | getString(String key_,
         String def_)指定キーで文字列値を得る
 | 
| String[] | getStringList(String key_,
             String dlmt_)指定デリミタで並べられた指定キーのString並びを得る
指定デリミタを挟み並んだ文字列をStringの配列として得ます。 | 
| ArrayList<String[]> | getStringLists(String key_)配列の文字列行をさらに空白で分解して配列のリストを得る | 
| ArrayList<String[]> | getStringLists(String key_,
              String dlmt_)カラム、行の2種のデリミタで分断される定義からStringの配列のArrayListを得る. | 
| ArrayList<String[]> | getStringLists(String key_,
              String dlmt_,
              long option_)行、カラム分割(オプション指定付き). | 
| String[] | getStrings(String key_)指定キーの文字列配列を得る. | 
| String[] | getStrings(String key_,
          String[] def_)指定キーの文字列配列を得る. | 
| hiProperty | getStruct(String key_)指定キーで構造値を得る
デフォルト値の指定はありません。 | 
| hiProperty | getStruct(String key_,
         hiProperty def_) | 
| HashMap<String,hiProperty> | getStructs()全構造値を得る. | 
| hiProperty[] | getStructs(String key_)指定キーの構造列配列を得る. | 
| hiProperty[] | getStructs(String key_,
          hiProperty[] def_) | 
| HashMap<String,String> | getValueTo()全単純値を得る. | 
| HashMap<String,String> | getValueTo(Class<?> dst_class_)static要素を取得. | 
| HashMap<String,String> | getValueTo(Class<?> dst_class_,
          long option_)static要素を取得
構造体のstatic要素名と同じ名前のプロパティー値を構造体内に取り込みます。 | 
| HashMap<String,String> | getValueTo(Object dst_obj_)構造体の要素に要素名と同じ名前のデータを取得する. | 
| HashMap<String,String> | getValueTo(Object dst_obj_,
          long option_)構造体の要素に要素名と同じ名前のデータを取得する. | 
| boolean | isExist(String key_)指定キーが有るか無いかを調べる
指定のキーがある場合真、無い場合偽が返ります。 | 
| boolean | parseJson(String json_,
         int offset_)JSON形式の文字列から作成(試験中). | 
| boolean | read(BufferedReader br_)指定のリーダーを読む. | 
| boolean | read(BufferedReader br_,
    long option_)指定のリーダーを読む. | 
| boolean | read(File file_,
    String charSet_)指定のPropertyファイルを読む. | 
| boolean | read(File file_,
    String charSet_,
    long option_)指定のPropertyファイルを読む。 | 
| boolean | read(String fileName_)指定のPropertyファイルを読む. | 
| boolean | read(String fileName_,
    long option_)指定のPropertyファイルを読む。 | 
| boolean | read(String fileName_,
    String charSet_)指定のPropertyファイルを読む. | 
| boolean | read(String fileName_,
    String charSet_,
    long option_)指定のPropertyファイルを読む。 | 
| boolean | readRes(Class class_,
       String fileName_)リソース上の指定のPropertyファイルを読む. | 
| boolean | readRes(Class class_,
       String fileName_,
       long option_)リソース上の指定のPropertyファイルを読む. | 
| boolean | readRes(Class class_,
       String fileName_,
       String charSet_)リソース上の指定のPropertyファイルを読む. | 
| boolean | readRes(Class class_,
       String fileName_,
       String charSet_,
       long option_)リソース上の指定のPropertyファイルを読む. | 
| boolean | readRes(String fileName_)リソース上の指定のPropertyファイルを読む. | 
| boolean | readRes(String fileName_,
       long option_)リソース上の指定のPropertyファイルを読む. | 
| boolean | readRes(String fileName_,
       String charSet_)リソース上の指定のPropertyファイルを読む. | 
| boolean | readRes(String fileName_,
       String charSet_,
       long option_)リソース上の指定のPropertyファイルを読む. | 
| boolean | readText(String text_)文字列で定義されたプロパティーを読む | 
| boolean | readText(String text_,
        long option_)文字列で定義されたプロパティーを読む
オプションとしてhiU.APPENDを指定すると、既に読み込まれている設定に追加となります。 | 
| static void | report_error(boolean flag_)Exception発生時などにSystem.errにレポートを出す. | 
| void | set_ignore_case(boolean ignore_)大文字小文字を無視する(キーは大文字化される). | 
| void | set_option(long option_)オプションをセットする. | 
| void | setString(String key_,
         String val_)内部データの追加/置き換えを行う. | 
| void | setStringArray(String key_,
              ArrayList<String> val_)内部データの追加/置き換えを行う. | 
| void | setStringArray(String key_,
              String[] aval_)内部データの追加/置き換えを行う. | 
| void | setStruct(String key_,
         hiProperty val_)内部データの追加/置き換えを行う. | 
| void | setStructArray(String key_,
              ArrayList<hiProperty> val_)内部データの追加/置き換えを行う. | 
| HashMap<String,String> | setValueFrom(Class<?> src_class_) | 
| HashMap<String,String> | setValueFrom(Class<?> src_class_,
            long option_) | 
| HashMap<String,String> | setValueFrom(Object src_class_) | 
| HashMap<String,String> | setValueFrom(Object src_class_,
            long option_) | 
| String | strVal(String key_)単純値の内部表現文字列を得る. | 
| String | toString()文字列化. | 
| static void | use_exception(boolean flag_)読み取り失敗時やデフォルト指定の無い値取得で値が無い場合RuntimeExceptionを投げる
デフォルトではExceptionを投げます。 | 
| static hiProperty | withText(String text_)指定文字列からhiPropertyを作成する. | 
| static hiProperty | withText(String[] texts_)指定文字列からhiPropertyを作成する. | 
| void | write(PrintWriter pr_)内容を文字列の形で出力する. | 
| void | write(String fileName_)内容を文字列の形で出力する. | 
| void | write(String fileName_,
     String charSet_)内容を文字列の形で出力する. | 
public String _LINE_CONNECTOR_
public static final long SPLIT_OPTION
getStringLists(String,String)で採用される文字列分割オプションです。
次の値を持ちます。hiText.SPLIT_OPTIONと同じです。
   (  hiU.CHECK_COMMENT   // コメントをチェックし、対象外とする
    | hiU.CHECK_QUOTE     // 引用符内のデリミタをデリミタとしない
    | hiU.OMIT_LAST_SPACE // 文字列がデリミタで終了する場合最後にnullを付加しない
    | hiU.AS_NULL        )// 空文字列の代わりにnullを設定する
public hiProperty()
public hiProperty(String fileName_, String charSet_)
指定ファイル名、指定文字セットでPropertyファイルを読みます。
文字セットは"utf-8"や"shift-jis"が指定できます。
fileName_ - ファイル名charSet_ - 文字セット
public hiProperty(File file_, String charSet_)
指定ファイル、指定文字セットでPropertyファイルを読みます。
文字セットは"utf-8"や"shift-jis"が指定できます。
file_ - ファイルcharSet_ - 文字セット
public hiProperty(String fileName_, String charSet_, long option_)
指定ファイル名、指定文字セットでPropertyファイルを読みます。
文字セットは"utf-8"や"shift-jis"が指定できます。
fileName_ - ファイル名charSet_ - 文字セットoption_ - オプション
public hiProperty(File file_, String charSet_, long option_)
指定ファイル名、指定文字セットでPropertyファイルを読みます。
文字セットは"utf-8"や"shift-jis"が指定できます。
file_ - ファイルcharSet_ - 文字セットoption_ - オプション
public hiProperty(String fileName_)
指定ファイル名、指定文字セットでPropertyファイルを読みます。
文字セットは"utf-8"となります
fileName_ - ファイル名
public hiProperty(File file_)
指定ファイル名、指定文字セットでPropertyファイルを読みます。
文字セットは"utf-8"となります
file_ - ファイル
public hiProperty(String fileName_, long option_)
指定ファイル名、指定文字セットでPropertyファイルを読みます。
文字セットは"utf-8"となります
fileName_ - ファイル名option_ - オプション
public hiProperty(File file_, long option_)
指定ファイル名、指定文字セットでPropertyファイルを読みます。
文字セットは"utf-8"となります
file_ - ファイルoption_ - オプション
public hiProperty(BufferedReader br_)
リーダーから情報を得ます。
br_ - 読み込むべきリーダー
public hiProperty(BufferedReader br_, long option_)
リーダーから情報を得ます。
br_ - 読み込むべきリーダー
public void check_key(String[] keys_, HashSet<String> unknown_keys_, String msg1_, String msg2_, long option_)
getKeyDef(String[])を参照してください。
指定キー以外のキーが見つかった場合、unknown_keys_に追加されます。hiProperty.IllegalKeyExceptionが投げられます。keys_ - 許されるキーセットunknown_keys_ - 見つかった許されないキーの戻し nullなら例外を投げるmsg1_ - 例外に載せるメッセージ、キー名の前に付くmsg2_ - 例外に載せるメッセージ、キー名の後に付くoption_ - hiU.SHALLOWを指定すると下位階層をチェックしないpublic static HashSet<String>[] getKeyDef(String[] keys_)
4種類のデータ形式とキーの結びつきの辞書を作成します。
4種のデータ形式は
| [string] | : | 文字列 | 
| [string-array] | : | 文字列配列 | 
| [struct] | : | 構造 | 
| [strruct-array] | : | 構造配列 | 
です。
キーがとり得る形式を指定します。キーは複数の形式を採ることができます。複数の形式は[]内に,で繋いで指定します。4種のいずれでもよい場合[any]を指定します。
記述法は文字列の配列で、まず[]で採り得る形式セットを書き、その後ろにキーを書きます。複数の形式セットがある場合は[]とキーの並びを必要分書いていきます。
例えばhiRegexでは次のようにキーが定義されています。
   final static String[] KEYS={
      //---- 型は問わない
      "[any]"
     ,"in"
     ,"out"
     ,"and_not"
     ,"and_or"
     ,"and"
     ,"scope"
      // ----- 文字列型
     ,"[string]"
     ,"literal"
     ,"replace_literal"
     ,"replace"
     ,"call"
     ,"file"
     ,"output"
      // ---- boolean
     ,"as_group"
     ,"as_literal"
     ,"single_region"
     ,"ignore_case"
     ,"verbose"
     ,"only_first"
      //---- 単純型または構造型
     ,"[string,struct]"
     ,"regex"
     ,"start"
     ,"end"
     ,"start_after"
     ,"end_before"
      //---- 構造型
     ,"[struct]"
      //---- 配列型
     ,"[struct-array]"
      //---- 構造または構造配列
     ,"[struct,struct-array]"
      ,"param"
      };
   final static HashSet<String>[] KEYS_DEF=hiProperty.getKeyDef(KEYS);
keys_ - キーの設定public void check_key(HashSet<String>[] keySet_, HashSet<String> unknown_keys_, String msg1_, String msg2_, long option_)
hiProperty.IllegalKeyExceptionが投げられます。keySet_ - getKeyDef(String[])で作成したキーセットunknown_keys_ - 見つかった許されないキーの戻し nullなら例外を投げるmsg1_ - 例外に載せるメッセージ、キー名の前に付くmsg2_ - 例外に載せるメッセージ、キー名の後に付くoption_ - hiU.SHALLOWを指定すると下位階層をチェックしないpublic String definedAt()
public String definedAt(int line_)
public void set_ignore_case(boolean ignore_)
引数trueで呼ぶと登録キーは大文字化され、検索時は引数の小文字は
大文字扱いとなります。
内容のread前に行う必要があります。
ignore_ - trueを指定すると大文字小文字を無視する。falseを指定すると無視しないpublic void set_option(long option_)
option_ - public static void report_error(boolean flag_)
デフォルトではException発生時にレポートは出しません。
flag_ - true:出す、false:出さないpublic static void use_exception(boolean flag_)
デフォルトではExceptionを投げます。
flag_ - true:投げる、false:投げないpublic boolean available()
public boolean read(String fileName_, String charSet_)
指定ファイル名、指定文字セットでPropertyファイルを読みます。
文字セットは"utf-8"や"shift-jis"が指定できます。
fileName_ - ファイル名charSet_ - 文字セットpublic boolean read(File file_, String charSet_)
指定ファイル名、指定文字セットでPropertyファイルを読みます。
文字セットは"utf-8"や"shift-jis"が指定できます。
file_ - ファイルcharSet_ - 文字セットpublic boolean read(String fileName_, String charSet_, long option_)
指定ファイル名、指定文字セットでPropertyファイルを読みます。
文字セットは"utf-8"や"shift-jis"が指定できます。
オプションとしてhiU.APPENDを指定すると、既に読み込まれている設定に追加となります。
fileName_ - ファイル名charSet_ - 文字セットoption_ - hiU.APPEND,hiU.IF_EXISThiU.NO_QUOTE_CONCAT、指定が有効です。public boolean read(File file_, String charSet_, long option_)
指定ファイル名、指定文字セットでPropertyファイルを読みます。
文字セットは"utf-8"や"shift-jis"が指定できます。
オプションとしてhiU.APPENDを指定すると、既に読み込まれている設定に追加となります。
file_ - ファイルcharSet_ - 文字セットoption_ - hiU.APPEND,hiU.IF_EXISThiU.NO_QUOTE_CONCAT、指定が有効です。public boolean read(String fileName_)
指定ファイル名、指定文字セットでPropertyファイルを読みます。
文字セットは"utf-8"となります。
fileName_ - ファイル名public boolean read(String fileName_, long option_)
指定ファイル名、指定文字セットでPropertyファイルを読みます。
オプションとしてhiU.APPENDを指定すると、既に読み込まれている設定に追加となります。
fileName_ - ファイル名option_ - hiU.APPEND指定のみが有効です。public boolean readRes(Class class_, String fileName_, String charSet_)
指定ファイル名、指定文字セットでPropertyファイルを読みます。
文字セットは"utf-8"や"shift-jis"が指定できます。utf-8の先頭のBOMは読み飛ばします。
class_ - リソース上の代表クラスfileName_ - ファイル名charSet_ - 文字セットpublic boolean readRes(Class class_, String fileName_, String charSet_, long option_)
指定ファイル名、指定文字セットでPropertyファイルを読みます。
文字セットは"utf-8"や"shift-jis"が指定できます。utf-8の先頭のBOMは読み飛ばします。
オプションとしてhiU.APPENDを指定すると、既に読み込まれている設定に追加となります。
class_ - リソース上の代表クラスfileName_ - ファイル名charSet_ - 文字セットoption_ - hiU.APPEND指定のみが有効です。public boolean readRes(String fileName_, String charSet_)
指定ファイル名、指定文字セットでPropertyファイルを読みます。
リソースパス上で探索されます。
文字セットは"utf-8"や"shift-jis"が指定できます。utf-8の先頭のBOMは読み飛ばします。
fileName_ - ファイル名charSet_ - 文字セットpublic boolean readRes(String fileName_, String charSet_, long option_)
指定ファイル名、指定文字セットでPropertyファイルを読みます。
リソースパス上で探索されます。
文字セットは"utf-8"や"shift-jis"が指定できます。utf-8の先頭のBOMは読み飛ばします。
オプションとしてhiU.APPENDを指定すると、既に読み込まれている設定に追加となります。
fileName_ - ファイル名charSet_ - 文字セットoption_ - hiU.APPEND指定のみが有効です。public boolean readRes(Class class_, String fileName_)
指定ファイル名、指定文字セットでPropertyファイルを読みます。
文字セットは"utf-8"となります。先頭のBOMは読み飛ばします。
class_ - リソース上の代表クラスfileName_ - ファイル名public boolean readRes(Class class_, String fileName_, long option_)
指定ファイル名、指定文字セットでPropertyファイルを読みます。
文字セットは"utf-8"となります。先頭のBOMは読み飛ばします。
オプションとしてhiU.APPENDを指定すると、既に読み込まれている設定に追加となります。
class_ - リソース上の代表クラスfileName_ - ファイル名option_ - hiU.APPEND指定のみが有効です。public boolean readRes(String fileName_)
指定ファイル名、指定文字セットでPropertyファイルを読みます。
リソースパス上で探索されます。
文字セットは"utf-8"となります。先頭のBOMは読み飛ばします。
fileName_ - ファイル名public boolean readRes(String fileName_, long option_)
指定ファイル名、指定文字セットでPropertyファイルを読みます。
リソースパス上で探索されます。
文字セットは"utf-8"となります。先頭のBOMは読み飛ばします。
オプションとしてhiU.APPENDを指定すると、既に読み込まれている設定に追加となります。
fileName_ - ファイル名option_ - hiU.APPEND指定のみが有効です。public boolean readText(String text_)
text_ - 定義文字列public boolean readText(String text_, long option_)
text_ - 定義文字列option_ - hiU.APPEND指定のみが有効です。public boolean read(BufferedReader br_)
リーダーから情報を得ます。
br_ - 読み込むべきリーダーpublic boolean read(BufferedReader br_, long option_)
リーダーから情報を得ます。 オプションとしてhiU.APPENDを指定すると、既に読み込まれている設定に追加となります。
br_ - 読み込むべきリーダーoption_ - hiU.APPEND指定のみが有効です。public static hiProperty withText(String text_)
text_ - プロパティー定義文字列(行は\\nであることに注意)public static hiProperty withText(String[] texts_)
texts_ - プロパティー定義文字列配列(1行1要素)public HashMap<String,String> getMap(String key_, HashMap<String,String> def_)
key_ - キーpublic HashMap<String,String> getMap(String key_)
key_ - キーpublic boolean containsKey(String key_)
key_ - キーpublic ArrayList<Object> getElements(String key_)
key_ - キーpublic String getString(String key_, String def_)
key_ - キーdef_ - 指定キーが見つからない場合のデフォルトpublic int getInt(String key_, int def_)
key_ - キーdef_ - 指定キーが見つからない場合のデフォルトpublic int getInt(String key_)
key_ - キーpublic double getDouble(String key_, double def_)
key_ - キーdef_ - 指定キーが見つからない場合のデフォルトpublic double getDouble(String key_)
key_ - キーpublic boolean getBoolean(String key_, boolean def_)
キーに"true","yes","on","1","真","はい"の何れかが 設定されている場合真が、それ以外では偽が得られます。 英小文字、英大文字は区別しません
key_ - キーdef_ - 指定キーが見つからない場合のデフォルトpublic boolean getBoolean(String key_)
キーに"true","yes","on","1","真","はい"の何れかが 設定されている場合真が、それ以外では偽が得られます。 英小文字、英大文字は区別しません
key_ - キーpublic boolean isExist(String key_)
指定のキーがある場合真、無い場合偽が返ります。
値記述の内容は問いません。
key_ - キーpublic hiProperty getStruct(String key_)
デフォルト値の指定はありません。指定キーが見つからない場合 nullとなります。
key_ - キーpublic hiProperty getStruct(String key_, hiProperty def_)
public hiProperty[] getStructs(String key_)
配列指定[]の中に構造指定{}が並んだ定義で構造の配列(hiPropertyの配列)を得ることができます。
注意:他の取得関数と異なり、指定キーの構造が無い場合nullを返します。
 X1 = [
   {
      a=0
      b=1
      }
   {
      a=4
      b=6
      }
   ]
======
 hiProperty structs[]= prop.getStructs("X1");
 for(hiProperty struct:structs){
    System.out.println("a="+struct.getInt("a"));
    System.out.println("b="+struct.getInt("b"));
    } 
======
 a=0
 b=1
 a=4
 b=6
key_ - キーpublic hiProperty[] getStructs(String key_, hiProperty[] def_)
public HashMap<String,hiProperty> getStructs()
public HashMap<String,ArrayList<String>> getArrays()
public final int[] getInts(String key_)
key_ - キーpublic int[] getInts(String key_, int[] def_)
key_ - キーdef_ - 指定キーが見つからない場合のデフォルトpublic int[] getInts(String key_, String dlmt_)
指定デリミタを挟み並んだ数値列をintの配列として得ます。
 x = 1,3,10,7 // 記述
...
 int[] ints= prop.getInts("x",",");
 // ints[0]=1,ints[1]=3,ints[2]=10,ints[3]=7
key_ - キーdlmt_ - デリミタpublic final double[] getDoubles(String key_)
key_ - キーpublic double[] getDoubles(String key_, double[] def_)
key_ - キーdef_ - 指定キーが見つからない場合のデフォルトpublic double[] getDoubles(String key_, String dlmt_)
指定デリミタを挟み並んだ数値列をdoubleの配列として得ます。
 x = 1,3.2,0.1,7e23 // 記述
...
 double[] dbls= prop.getDoubles("x",",");
 // dbls[0]=1.0,dbls[1]=3.2,dblss[2]=0.1,dbls[3]=7e32
key_ - キーdlmt_ - デリミタpublic final String[] getStrings(String key_)
key_ - キーpublic String[] getStrings(String key_, String[] def_)
key_ - キーdef_ - 指定キーが見つからない場合のデフォルトpublic ArrayList<String[]> getStringLists(String key_, String dlmt_)
カラム区切り、行区切りの文字列を指定することで2段リスト文字列解析ができます。
単純文字列または複数行文字列の字句解析を行い2段リストArrayList<String[]>の
形でデータを取得することができます。
通常のgetString()では複数行文字列内はコメント無効で、コメント記述も通常の
データとして取り込まれますがgetStringLists()ではコメント扱いされます。
 keyS= a,b,c;d,";;",e;f,g h,i;   // ※1
 keyM=<[[
   A,B,
                  C;             //  ※2
   '"',"'","'"'"';               //  ※3,4,5
   F, G    H ,"   I  ";          //  ※6,7
 ]]>
 ====
 ArrayList<String[]> dataS= prop.getStringLists("keyS",",;");
  [ [ a
      b
      c ]
    [ d
      ;;        ※1
      e ]
    [ f
      g h
      i ] ]
 ArrayList<String[]> dataM= prop.getStringLists("keyM",",;");
  [ [ A
      B
      C ]
    [ "         ※2
      '       ※3
      '" ]      ※4
    [ F
      G   H   ※5
        I  ] ]  ※6
 ※1:引用符の中に入れるとデリミタ扱いされません。
 ※2:途中で改行しても構いません(デリミタとして"\n"を指定していない場合)
 ※3:シングルクオートの中にダブルクオートを入れることができます。
 ※4:ダブルクオートの中にシングルクオートを入れることができます。
 ※5:引用符で囲まれた部分は連結されます。
 ※6:各要素の左右の空白はトリミングされます。
 ※7:引用符の中の空白は有効です。
文字列配列要素をデリミタ区切りで分解することもできます。この場合は
カラム区切り文字のみ指定します。改行が行区切りになります。
引用符から始まる行は行読み込み時点で引用符の解釈を行ったうえで、
再分解しますので、<[[...]]>とは結果が異なります。
  keyA=[
    A,B,C
    '"',"'","'"'"'      // 引用符で開始する行は扱いが異なるので注意が必要
    F, G   H ,"  i  "
    ]
 ====
  ArrayList<String[]> dataA=prop.getStringLists("keyA",",");
  // '"',"'","'"'"' -> ",','" -> ,','
  // [  [A ,B ,C] [ ,',' ][ F , G  H ,  I ]  ]
key_ - キーdlmt_ - 2文字、第1文字がカラム区切り、第2文字が行区切り(カラム区切りのみでもよい)public ArrayList<String[]> getStringLists(String key_)
key_ - キーpublic ArrayList<String[]> getStringLists(String key_, String dlmt_, long option_)
getStringLists(String,String)にオプション指定を付けたものです。コメントの
取扱いや空文字の取り扱いなどを指定できる他、hiProperty.SPLIT_OPTIONとともに
hiU.SAVE_MEMORY
を指定すると、カラムの各要素にintern()を施し、同じ値が沢山
ある場合にメモリ節約ができます。
   ArrayList<String[]> defs= conf.getStringLists(
                                   text,",;",hiTextTable.SPLIT_OPTION|hiU.SAVE_MEMORY);
key_ - キーdlmt_ - デリミタoption_ - オプションpublic ArrayList<String[]> findStringLists(String key_, String dlmt_, String[] colNames_, String[] colVals_)
カラム区切り、行区切りを持ち、先頭行がカラム名の並びとなっている文字列データから
名前で指定されるカラムが指定の値である行の並びを得ます。
引用符、コメント、行の扱いに関してはgetStringLists(String,String)を参照してください。
戻り値の先頭はカラム名の行です。
 data=<[[
   a,b,c,d;
   1,4,5,2;
   2,3,5,4;
   3,7,1,6;
   4,3,5,9;
   5,2,1,4;
 ]]>
 ============
 String[] colNames={"b","c"};
 String[] colVals ={"3","5"};
 ArrayList<String[]> rows= prop.findStringLists("data",",;",colNames,colVals);
 // [ [a,b,c,d],[2,3,5,2],[4,3,5,9] ] が得られる
key_ - キーdlmt_ - 2文字、第1文字がカラム区切り、第2文字が行区切りcolNames_ - チェックするカラム名の並びcolVals_ - 期待する値の並びpublic ArrayList<String[]> findStringLists(String key_, String dlmt_, int[] colIndxs_, String[] colVals_)
カラム区切り、行区切りを持ち、先頭行がカラム名の並びとなっている文字列データから
インデックスで指定されるカラムが指定の値である行の並びを得ます。
引用符、コメント、行の扱いに関してはgetStringLists(String,String)を参照してください。
先頭行はチェックされず、戻り値の先頭になります。
 data=<[[
   a,b,c,d;
   1,4,5,2;
   2,3,5,4;
   3,7,1,6;
   4,3,5,9;
   5,2,1,4;
 ]]>
 ============
 int[]    colIndxs={1,2};
 String[] colVals ={"3","5"};
 ArrayList<String[]> rows= prop.findStringLists("data",",;",colIndxs,colVals);
 // [ [a,b,c,d],[2,3,5,2],[4,3,5,9] ] が得られる
key_ - キーdlmt_ - 2文字、第1文字がカラム区切り、第2文字が行区切りcolIndxs_ - チェックするカラムインデックスの並びcolVals_ - 期待する値の並びpublic ArrayList<String[]> findStringLists(String key_, String dlmt_, int[] colIndxs_, String[] colVals_, long option_)
カラムインデックス指定で、値の一致する行を抽出する。
findStringLists(String,String,int[],String[])に先頭チェックhiU.CHECK_TOP
オプション指定を可能としたものです。
先頭行がカラム名の並びではなく値の並びとなっているものを取り扱います。
 data=<[[
   9,2,5,1; // 先頭:この行もチェック対象とする
   1,4,5,2;
   2,3,5,4;
   3,7,1,6;
   4,3,5,9;
   5,2,1,4;
 ]]>
 ============
 int[]    colIndxs={1,2};
 String[] colVals ={"3","5"};
 ArrayList<String[]> rows= prop.findStringLists("data",",;",colIndxs,colVals
                                            ,hiU.CHECK_TOP);
 // [ [2,3,5,2],[4,3,5,9] ] が得られる
key_ - キーdlmt_ - 2文字、第1文字がカラム区切り、第2文字が行区切りcolIndxs_ - チェックするカラムインデックスの並びcolVals_ - 期待する値の並びoption_ - オプションpublic boolean[] getBooleans(String key_)
key_ - キーpublic boolean[] getBooleans(String key_, boolean[] def_)
key_ - キーdef_ - 指定キーが見つからない場合のデフォルトpublic boolean[] getBooleans(String key_, String dlmt_)
指定デリミタを挟み並んだ数値列をbooleanの配列として得ます。
 x = true,false,on,off // 記述
...
 boolean[] bools= prop.getBooleans("x",",");
 // bools[0]=true,bools[1]=false,bools[2]=true,bools[3]=false
key_ - キーdlmt_ - デリミタpublic int[] getIntList(String key_, String dlmt_)
指定デリミタを挟み並んだ数値列をintの配列として得ます。
 x = 1,3,10,7 // 記述
...
 int[] ints= prop.getIntList("x",",");
 // ints[0]=1,ints[1]=3,ints[2]=10,ints[3]=7
key_ - キーdlmt_ - デリミタpublic double[] getDoubleList(String key_, String dlmt_)
指定デリミタを挟み並んだ数値列をdoubleの配列として得ます。
 x = 1,3.2,0.1,7e23 // 記述
...
 double[] dbls= prop.getDoubleList("x",",");
 // dbls[0]=1.0,dbls[1]=3.2,dblss[2]=0.1,dbls[3]=7e32
key_ - キーdlmt_ - デリミタpublic String[] getStringList(String key_, String dlmt_)
指定デリミタを挟み並んだ文字列をStringの配列として得ます。 前後の空白文字が削除されることに注意が必要です。
 x = aa,あいう,!,p // 記述
...
 String[] strs= prop.getStringList("x",",");
 // strs[0]="aa",strs[1]="あいう",strs[2]="!",strs[3]="p"
key_ - キーdlmt_ - デリミタpublic boolean[] getBooleanList(String key_, String dlmt_)
指定デリミタを挟み並んだ数値列をbooleanの配列として得ます。
 x = true,false,on,off // 記述
...
 boolean[] bools= prop.getBooleanList("x",",");
 // bools[0]=true,bools[1]=false,bools[2]=true,bools[3]=false
key_ - キーdlmt_ - デリミタpublic void setString(String key_, String val_)
key_ - キーval_ - 値public void setStruct(String key_, hiProperty val_)
key_ - キーval_ - 値public void setStringArray(String key_, ArrayList<String> val_)
key_ - キーval_ - 値public void setStringArray(String key_, String[] aval_)
key_ - キーaval_ - 値public void setStructArray(String key_, ArrayList<hiProperty> val_)
key_ - キーval_ - 値public void write(String fileName_)
内容を再び読み込むことの可能な文字列の形で出力します。 文字列には全て<[[...]]>が用いられます。 文字セットはutf-8です。
     // 書き出し
     propX.write("prop_out.txt");
     // 読み込み
     hiProperty prop=new hiProperty("prop_out.txt");
java.io.Seriakizableの派生ですので、 文字列形でなくてもよければオブジェクト出力することもできます。
     // 書き出し
     ObjectOutputStream oos=hiFile.openObjectFileW("prop_obj.dat");
     oos.writeObject(propX);
     oos.close(); // 重要!
     // 読み込み
     ObjectInputStream ois=hiFile.openObjectFileR("prop_obj.dat");
     hiProperty prop=(hiProperty)ois.readObject();
     ois.close();
fileName_ - 出力ファイル名public void write(String fileName_, String charSet_)
fileName_ - 出力ファイル名charSet_ - 文字セットを指定します。public void write(PrintWriter pr_)
内部データの文字列ダンプを行います。
入力された形式のままとはならず、値は全て<[[...]]>の形となります。
基本的には再読み込み可能ですが文字列の中に"]]>"がある場合再読み込みはできません。
pr_ - 出力先(出力先のflushは行います,closeは行いません)public HashMap<String,String> getValueTo(Object dst_obj_)
構造体の要素名と同じ名前のプロパティー値を構造体内に取り込みます。
dst_obj_ - この構造体に情報を取り出すpublic HashMap<String,String> getValueTo(Object dst_obj_, long option_)
dst_obj_ - この構造体に情報を取り出すoption_ - hiU.VERBOSEを指定すると正常(OKおよびOMIT)の結果も戻り値に載せるpublic HashMap<String,String> getValueTo(Class<?> dst_class_)
構造体のstatic要素名と同じ名前のプロパティー値を構造体内に取り込みます。
dst_class_ - このクラスのstatic要素の同名の値を取得する.public HashMap<String,String> getValueTo(Class<?> dst_class_, long option_)
構造体のstatic要素名と同じ名前のプロパティー値を構造体内に取り込みます。
dst_class_ - このクラスのstatic要素の同名の値を取得し設定する.option_ - オプションpublic String toString()
内部データの文字列ダンプを行います。
入力された形式のままとはならず、値は全て<[[...]]>の形となります。
基本的には再読み込み可能な形式ですが文字列の中に"]]>"がある場合再読み込み不能な形になります。
public boolean parseJson(String json_, int offset_)
json_ - JSON文字列offset_ - 文字列オフセット