|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Objectjp.terasoluna.fw.file.dao.standard.AbstractFileLineIterator<T>
T
- ファイル行オブジェクト。public abstract class AbstractFileLineIterator<T>
ファイルアクセス(データ取得)用の共通クラス。
ファイルアクセス(データ取得)を行う3つのクラス(CSV、固定長、可変長) に共通する処理をまとめた抽象クラス。 ファイルの種類に対応するサブクラスが処理を行う。
使用例はFileLineIterator
を参照のこと。
IllegalStateExceptionが発生します。
- 関連項目:
FileLineIterator
,
CSVFileLineIterator
,
FixedFileLineIterator
,
VariableFileLineIterator
,
PlainFileLineIterator
フィールドの概要
private boolean
calledInit
初期化処理確認用フラグ。
private java.lang.Class<T>
clazz
結果クラス。
private int[]
columnBytes
各カラムごとのバイト数を格納する変数。
private char[]
columnEncloseChar
各カラムごとの囲み文字を格納する変数。
private java.lang.String[]
columnFormats
各カラムごとのカラムのフォーマットを格納する変数。
private int[]
columnIndexs
各カラムごとのカラムIndexを格納する変数。
private java.util.Map<java.lang.String,ColumnParser>
columnParserMap
カラムパーサーを格納するマップ。
private int
currentLineCount
ファイル入力処理済みのデータ部の行数。
private boolean
enclosed
囲み文字確認用フラグ。
private java.lang.reflect.Field[]
fields
ファイル行オブジェクトのField情報(Annotation)を格納する変数。
private java.lang.String
fileEncoding
ファイルエンコーディング。
private java.lang.String
fileName
ファイル名。
private java.util.List<java.lang.String>
header
ヘッダ部の文字列リスト。
private int
headerLineCount
ヘッダ行数。
private static int
INITIAL_LINE_NO
初期化処理をあらわす行番号。
private InputFileColumn[]
inputFileColumns
ファイル行オブジェクトの入力設定アノテーションを格納する変数。
private java.lang.String
lineFeedChar
行区切り文字。
private LineReader
lineReader
1行分の文字列を読み込むオブジェクト
private java.lang.reflect.Method[]
methods
ファイル行オブジェクトのFieldに対応するsetterメソッドを格納する。
private char[]
paddingChars
各カラムごとのパディング文字を格納する変数。
private PaddingType[]
paddingTypes
各カラムごとのパディング種別を格納する変数。
private java.io.BufferedReader
reader
ファイルアクセス用の文字ストリーム。
private boolean
readTrailer
トレイラ部処理確認用フラグ。
private static java.util.Map<java.lang.Class,StringConverter>
stringConverterCacheMap
ファイル行オブジェクトのストリングコンバータを格納するマップ。
private StringConverter[]
stringConverters
ファイル行オブジェクトのストリングコンバータを格納する変数。
private int
totalBytes
1行分のバイト数を格納する変数。
private java.util.List<java.lang.String>
trailer
トレイラ部の文字列リスト。
private int
trailerLineCount
トレイラ行数。
private java.util.Queue<java.lang.String>
trailerQueue
トレイラ部の一時格納用のキュー。
private char[]
trimChars
各カラムのトリム文字を格納する変数。
private TrimType[]
trimTypes
各カラムごとのトリム種別を格納する変数。
コンストラクタの概要
AbstractFileLineIterator(java.lang.String fileName,
java.lang.Class<T> clazz,
java.util.Map<java.lang.String,ColumnParser> columnParserMap)
コンストラクタ。
メソッドの概要
private void
buildFields()
InputFileColumnアノテーションが設定されているファイル行オブジェクトの 属性の配列を生成する。
private void
buildHeader()
ヘッダ部の取得を行う。
private void
buildLineReader()
ファイルからデータを読込むためのLineReaderを生成する。
private void
buildMethods()
ファイル行オブジェクトの属性のsetterメソッドのメソッドオブジェクトの配列を生成する。
private void
buildStringConverters()
ファイル行オブジェクトの属性の文字変換種別オブジェクトの配列を生成する。
private void
buildTrailerQueue()
トレイラキューの初期化を行う。
void
closeFile()
ファイル閉塞処理を行う。
protected int[]
getColumnBytes()
各カラムのバイト数を取得する。
protected char[]
getColumnEncloseChar()
カラムの囲み文字を取得する。
int
getCurrentLineCount()
現在ファイル入力処理済みのデータ部内の行数を取得する。
protected abstract char
getDelimiter()
区切り文字を取得する。
protected abstract char
getEncloseChar()
囲み文字を取得する。
protected java.lang.reflect.Field[]
getFields()
ファイル行オブジェクトのField情報(Annotation)を格納する変数を取得する。
protected java.lang.String
getFileEncoding()
ファイルエンコーディング取得する。
protected java.lang.String
getFileName()
ファイル名を取得する。
java.util.List<java.lang.String>
getHeader()
ヘッダ部のデータを取得する。
protected int
getHeaderLineCount()
ヘッダ行数を取得する。
protected java.lang.String
getLineFeedChar()
行区切り文字を取得する。
protected int
getTotalBytes()
1行分のバイト数を取得する。
java.util.List<java.lang.String>
getTrailer()
トレイラ部のデータを取得する。
protected int
getTrailerLineCount()
トレイラ行数を取得する。
boolean
hasNext()
次の行のレコードがあるかどうか確認する。
protected void
init()
初期化処理を行う。
protected boolean
isCheckByte(InputFileColumn inputFileColumn)
対象カラムに対するバイト数チェックを行うかを返す。
protected boolean
isCheckByte(int columnByte)
対象カラムに対するバイト数チェックを行うかを返す。
protected boolean
isCheckColumnAnnotationCount()
ファイル行オブジェクトにアノテーションが設定されている事をチェックするかどうかを返す。
protected boolean
isCheckEncloseChar()
囲み文字が設定されていない事をチェックするかどうかを返す。
protected boolean
isEnclosed()
囲み文字が設定されているかを返す。
T
next()
繰り返し処理でファイル行オブジェクトを返却する。
protected java.lang.String
readLine()
ファイルからデータ部のデータを1行分読み取り、文字列として呼出元に返却する。
void
remove()
サポートしない。
protected abstract java.lang.String[]
separateColumns(java.lang.String fileLineString)
データ部のデータ1行分をファイル行オブジェクトのアノテーションの記述に 従いカラムに分割する。
protected void
setLineFeedChar(java.lang.String lineFeedChar)
行区切り文字を設定する。
void
skip(int skipLines)
データ部のデータを読み飛ばす処理を行う。
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
フィールドの詳細
INITIAL_LINE_NO
private static final int INITIAL_LINE_NO
- 初期化処理をあらわす行番号。
- 関連項目:
- 定数フィールド値
fileName
private java.lang.String fileName
- ファイル名。
clazz
private java.lang.Class<T> clazz
- 結果クラス。
lineFeedChar
private java.lang.String lineFeedChar
- 行区切り文字。
fileEncoding
private java.lang.String fileEncoding
- ファイルエンコーディング。
headerLineCount
private int headerLineCount
- ヘッダ行数。
trailerLineCount
private int trailerLineCount
- トレイラ行数。
currentLineCount
private int currentLineCount
- ファイル入力処理済みのデータ部の行数。
reader
private java.io.BufferedReader reader
- ファイルアクセス用の文字ストリーム。
fields
private java.lang.reflect.Field[] fields
- ファイル行オブジェクトのField情報(Annotation)を格納する変数。
inputFileColumns
private InputFileColumn[] inputFileColumns
- ファイル行オブジェクトの入力設定アノテーションを格納する変数。
columnIndexs
private int[] columnIndexs
- 各カラムごとのカラムIndexを格納する変数。
columnFormats
private java.lang.String[] columnFormats
- 各カラムごとのカラムのフォーマットを格納する変数。
columnBytes
private int[] columnBytes
- 各カラムごとのバイト数を格納する変数。
totalBytes
private int totalBytes
- 1行分のバイト数を格納する変数。
paddingTypes
private PaddingType[] paddingTypes
- 各カラムごとのパディング種別を格納する変数。
paddingChars
private char[] paddingChars
- 各カラムごとのパディング文字を格納する変数。
trimTypes
private TrimType[] trimTypes
- 各カラムごとのトリム種別を格納する変数。
trimChars
private char[] trimChars
- 各カラムのトリム文字を格納する変数。
columnEncloseChar
private char[] columnEncloseChar
- 各カラムごとの囲み文字を格納する変数。
stringConverters
private StringConverter[] stringConverters
- ファイル行オブジェクトのストリングコンバータを格納する変数。
stringConverterCacheMap
private static java.util.Map<java.lang.Class,StringConverter> stringConverterCacheMap
- ファイル行オブジェクトのストリングコンバータを格納するマップ。
methods
private java.lang.reflect.Method[] methods
- ファイル行オブジェクトのFieldに対応するsetterメソッドを格納する。
columnParserMap
private java.util.Map<java.lang.String,ColumnParser> columnParserMap
- カラムパーサーを格納するマップ。
header
private java.util.List<java.lang.String> header
- ヘッダ部の文字列リスト。
trailer
private java.util.List<java.lang.String> trailer
- トレイラ部の文字列リスト。
readTrailer
private boolean readTrailer
- トレイラ部処理確認用フラグ。
trailerQueue
private java.util.Queue<java.lang.String> trailerQueue
- トレイラ部の一時格納用のキュー。
lineReader
private LineReader lineReader
- 1行分の文字列を読み込むオブジェクト
calledInit
private boolean calledInit
- 初期化処理確認用フラグ。
enclosed
private boolean enclosed
- 囲み文字確認用フラグ。
コンストラクタの詳細
AbstractFileLineIterator
public AbstractFileLineIterator(java.lang.String fileName,
java.lang.Class<T> clazz,
java.util.Map<java.lang.String,ColumnParser> columnParserMap)
- コンストラクタ。
引数のチェック及び、ファイル行オブジェクトのFileFormatアノテーション 設定のチェックを行う。
チェック結果問題がある場合は例外を発生する。
- パラメータ:
fileName
- ファイル名最後に移動clazz
- ファイル行オブジェクトクラスcolumnParserMap
- フォーマット処理リスト
- 例外:
FileException
- 初期化処理で失敗した場合。
メソッドの詳細
hasNext
public boolean hasNext()
- 次の行のレコードがあるかどうか確認する。
繰り返し処理でさらに要素がある場合に true を返します。
- 定義:
- インタフェース
java.util.Iterator
内の hasNext
- 定義:
- インタフェース
FileLineIterator<T>
内の hasNext
- 戻り値:
- 繰り返し処理でさらに要素がある場合に
true
- 例外:
FileException
- リーダからIOExceptionが発生した場合。
next
public T next()
- 繰り返し処理でファイル行オブジェクトを返却する。
次の行のレコードの情報をファイル行オブジェクトに格納して返却します。
繰り返し処理で次の要素を返します。
次の行のレコードの情報はファイル行オブジェクトのInputFileColumnの定義に 基づいて格納される。
もし、ファイル行オブジェクトのマッピングフィールドの数と合わない レコード情報が来た場合は例外を発生する。
また、InputFileColumnに設定されたバイト数と違う情報が来た場合も例外を発生する。
それではない場合は以下の順番でデータを処理し格納する。
- トリム処理
- パディング処理
- 文字列変換処理
- 型変換(マッピング)処理
- 定義:
- インタフェース
java.util.Iterator
内の next
- 定義:
- インタフェース
FileLineIterator<T>
内の next
- 戻り値:
- ファイル行オブジェクト
- 例外:
FileException
- ファイル行オブジェクトの生成に失敗した場合。
FileLineException
- ファイル行オブジェクトの取得に失敗した場合。
remove
public void remove()
- サポートしない。
Iteratorで定義されているメソッド。
FileQueryDAOでは実装しないので、他のクラスから呼び出した場合、 UnsupportedOperationExceptionをスローする。
- 定義:
- インタフェース
java.util.Iterator
内の remove
- 例外:
java.lang.UnsupportedOperationException
- このメソッドはサポートしない。
init
protected void init()
- 初期化処理を行う。
初期化処理で行う処理は以下です。。
- ファイル行オブジェクトの属性(Field)の取得
- 文字変換種別オブジェクト(stringConverters)の生成
- ファイル行オブジェクトの属性に対するセッタメソッド(methods)の取得
- ファイルからデータを読込むためのLineReaderの生成
- ヘッダ部の取得
- トレイラキューの初期化
init()はAbstracFileLineIteratorを継承するクラスのコンストラクタで 呼ぶメソッドである。
下位互換性のため、2回以上実行できないようにしている。
- 例外:
FileException
- 初期化処理で失敗した場合。
FileLineException
- カラムに関連する初期化処理で失敗した場合。
buildLineReader
private void buildLineReader()
- ファイルからデータを読込むためのLineReaderを生成する。
ファイルのReaderの生成および、利用すべきLineReaderの生成を行う。
行区切り文字が0,1,2桁ではない場合は例外を発生する。
- 例外:
FileException
- LineReaderの生成に失敗した場合。
buildFields
private void buildFields()
- InputFileColumnアノテーションが設定されているファイル行オブジェクトの 属性の配列を生成する。
取得対象属性はファイル行オブジェクトと継承元の全クラスの属性です。
取得した属性のInputFileColumn.columnIndex()
が他属性と重複して いる場合は例外が発生する。
また、InputFileColumn.columnIndex()
の最大値がカラムの数と合わない 場合も例外が発生する。
ファイル行オブジェクトの属性の設定に問題が無い場合は InputFileColumnアノテーション設定がある属性のみ整理し配列にする。
- 例外:
FileException
- カラムインデックスが重複した場合。
buildStringConverters
private void buildStringConverters()
- ファイル行オブジェクトの属性の文字変換種別オブジェクトの配列を生成する。
生成された文字変換種別オブジェクトインスタンスはキャッシュし、 同様の設定がある属性で利用する。
設定された文字変換種別オブジェクトがインスタンス化出来ないものの場合に 例外が発生する。
- 例外:
FileLineException
- 文字変換種別オブジェクトの生成に失敗した場合。
buildMethods
private void buildMethods()
- ファイル行オブジェクトの属性のsetterメソッドのメソッドオブジェクトの配列を生成する。
属性に対するsetterメソッドは以下のルールで検索する。
- 属性名の最初の文字を大文字にした文字列の先頭に「set」をつけたもの。
setterメソッドが検索できない場合は例外が発生する。
- 例外:
FileException
- setterメソッドが見つからなかった場合。
buildHeader
private void buildHeader()
- ヘッダ部の取得を行う。
指定された行数分のデータが存在しない場合に例外を返す。
- 例外:
FileException
- ヘッダ部の取得に失敗した場合。
buildTrailerQueue
private void buildTrailerQueue()
- トレイラキューの初期化を行う。
トレイラ部はデータ部を全部読んだ後の部分で構成されますが、 ファイルは前から後に順調に読まれるため、
今取得したデータがデータ部の情報なのかトレイラ部の情報かが判断できない。
そのため、キューにデータを入れて取得する。
指定された行数分のデータが存在しない場合に例外を返す。
- 例外:
FileException
- トレイラキューの初期化処理が失敗した場合。
closeFile
public void closeFile()
- ファイル閉塞処理を行う。
- 定義:
- インタフェース
FileLineIterator<T>
内の closeFile
- 例外:
FileException
- ファイル閉塞処理で失敗した場合。
getHeader
public java.util.List<java.lang.String> getHeader()
- ヘッダ部のデータを取得する。
データ部とトレイラ部の取得処理の実行可否と関係なくヘッダ部を取得することが 出来る。
- 定義:
- インタフェース
FileLineIterator<T>
内の getHeader
- 戻り値:
- header ヘッダ部の文字列リスト
getTrailer
public java.util.List<java.lang.String> getTrailer()
- トレイラ部のデータを取得する。
トレイラ部のデータを取得するとデータ部のデータを取得することは出来ない。
理由はトレイラ部のデータ取得時に、データ部の情報を全部スキップするためです。
※注意事項
データ部のデータを全部取得する以前にトレイラ部を取得しないこと。
- 定義:
- インタフェース
FileLineIterator<T>
内の getTrailer
- 戻り値:
- トレイラ部の文字列リスト
- 例外:
FileException
- データ行取得処理で失敗した場合。
readLine
protected java.lang.String readLine()
- ファイルからデータ部のデータを1行分読み取り、文字列として呼出元に返却する。
トレイラ部が存在する場合はトレイラキューからデータを取得して結果文字列に する。
その後LineReaderから1行分の文字列を取得しトレイラキューに格納する。
トレイラ部が存在しない場合はLineReaderから取得した1行分の文字列を結果文字列に する。
もし、次の1行分のデータがない場合はnullを返す。
- 戻り値:
- データ部の1行分の文字列
- 例外:
FileException
- データ行取得処理で失敗した場合。
skip
public void skip(int skipLines)
- データ部のデータを読み飛ばす処理を行う。
- 定義:
- インタフェース
FileLineIterator<T>
内の skip
- パラメータ:
skipLines
- 読み飛ばす行数。
getDelimiter
protected abstract char getDelimiter()
- 区切り文字を取得する。
- 戻り値:
- 行区切り文字。
getEncloseChar
protected abstract char getEncloseChar()
- 囲み文字を取得する。
- 戻り値:
- 囲み文字。
separateColumns
protected abstract java.lang.String[] separateColumns(java.lang.String fileLineString)
- データ部のデータ1行分をファイル行オブジェクトのアノテーションの記述に 従いカラムに分割する。
引数fileLineString
がnull
もしくは 空文字の場合は、要素を持たないString
配列を返します。
サブクラスはこのメソッドをオーバーライドします。
- パラメータ:
fileLineString
- データ部のデータ1行分
- 戻り値:
- データ部1行の文字列を分解した文字配列
isCheckByte
protected boolean isCheckByte(InputFileColumn inputFileColumn)
- 対象カラムに対するバイト数チェックを行うかを返す。
- パラメータ:
inputFileColumn
- 対象カラムのInputFileColumn情報
- 戻り値:
- バイト数が設定されている(1バイト以上)場合はtrue。
isCheckByte
protected boolean isCheckByte(int columnByte)
- 対象カラムに対するバイト数チェックを行うかを返す。
- パラメータ:
columnByte
- 対象カラムのバイト数
- 戻り値:
- バイト数が設定されている(1バイト以上)場合はtrue。
getLineFeedChar
protected java.lang.String getLineFeedChar()
- 行区切り文字を取得する。
- 戻り値:
- 行区切り文字
setLineFeedChar
protected void setLineFeedChar(java.lang.String lineFeedChar)
- 行区切り文字を設定する。
- パラメータ:
行区切り文字
-
getFileEncoding
protected java.lang.String getFileEncoding()
- ファイルエンコーディング取得する。
- 戻り値:
- ファイルエンコーディング
getHeaderLineCount
protected int getHeaderLineCount()
- ヘッダ行数を取得する。
- 戻り値:
- ヘッダ行数
getTrailerLineCount
protected int getTrailerLineCount()
- トレイラ行数を取得する。
- 戻り値:
- トレイラ行数
getCurrentLineCount
public int getCurrentLineCount()
- 現在ファイル入力処理済みのデータ部内の行数を取得する。
- 戻り値:
- ファイル入力処理済みのデータ部の行数。
getFields
protected java.lang.reflect.Field[] getFields()
- ファイル行オブジェクトのField情報(Annotation)を格納する変数を取得する。
- 戻り値:
- ファイル行オブジェクトのField情報(Annotation)を格納する変数
getFileName
protected java.lang.String getFileName()
- ファイル名を取得する。
- 戻り値:
- fileName ファイル名
getColumnEncloseChar
protected char[] getColumnEncloseChar()
- カラムの囲み文字を取得する。
- 戻り値:
- columnEncloseChar 囲み文字
isEnclosed
protected boolean isEnclosed()
- 囲み文字が設定されているかを返す。
- 戻り値:
- enclosed 囲み文字
getColumnBytes
protected int[] getColumnBytes()
- 各カラムのバイト数を取得する。
- 戻り値:
- columnBytes 各カラムのバイト数
getTotalBytes
protected int getTotalBytes()
- 1行分のバイト数を取得する。
- 戻り値:
- totalBytes 1行分のバイト数
isCheckEncloseChar
protected boolean isCheckEncloseChar()
- 囲み文字が設定されていない事をチェックするかどうかを返す。
- 戻り値:
- チェックを行う場合はtrue。
isCheckColumnAnnotationCount
protected boolean isCheckColumnAnnotationCount()
- ファイル行オブジェクトにアノテーションが設定されている事をチェックするかどうかを返す。
- 戻り値:
- チェックを行う場合はtrue。
概要
パッケージ
クラス
使用
階層ツリー
非推奨 API
索引
ヘルプ
前のクラス
次のクラス
フレームあり
フレームなし
概要: 入れ子 | フィールド | コンストラクタ | メソッド
詳細: フィールド | コンストラクタ | メソッド