jp.terasoluna.fw.file.dao.standard
クラス AbstractFileLineIterator<T>

java.lang.Object
  上位を拡張 jp.terasoluna.fw.file.dao.standard.AbstractFileLineIterator<T>
型パラメータ:
T - ファイル行オブジェクト。
すべての実装されたインタフェース:
Iterator, FileLineIterator<T>
直系の既知のサブクラス:
FixedFileLineIterator, PlainFileLineIterator, VariableFileLineIterator

public abstract class AbstractFileLineIterator<T>
extends Object
implements FileLineIterator<T>

ファイルアクセス(データ取得)用の共通クラス。

ファイルアクセス(データ取得)を行う3つのクラス(CSV、固定長、可変長) に共通する処理をまとめた抽象クラス。 ファイルの種類に対応するサブクラスが処理を行う。
使用例はFileLineIteratorを参照のこと。

ファイル取得処理はデータを先頭から順番に読み込むため、下記の手順で呼び出されるように実装する必要があります。
もし、トレイラ部の取得を行うと内部で残っているデータ部を全部スキップするため、 処理途中にトレイラ部を取得するとデータ部の取得が出来なくなります。
トレイラ部の取得後データ部取得処理を実行するとIllegalStateExceptionが発生します。

関連項目:
FileLineIterator, CSVFileLineIterator, FixedFileLineIterator, VariableFileLineIterator, PlainFileLineIterator

コンストラクタの概要
AbstractFileLineIterator(String fileName, Class<T> clazz, Map<String,ColumnParser> columnParserMap)
          コンストラクタ。
 
メソッドの概要
 void closeFile()
          ファイル閉塞処理を行う。
protected  int[] getColumnBytes()
          各カラムのバイト数を取得する。
protected  char[] getColumnEncloseChar()
          カラムの囲み文字を取得する。
 int getCurrentLineCount()
          現在ファイル入力処理済みのデータ部内の行数を取得する。
protected abstract  char getDelimiter()
          区切り文字を取得する。
protected abstract  char getEncloseChar()
          囲み文字を取得する。
protected  Field[] getFields()
          ファイル行オブジェクトのField情報(Annotation)を格納する変数を取得する。
protected  String getFileEncoding()
          ファイルエンコーディング取得する。
protected  String getFileName()
          ファイル名を取得する。
 List<String> getHeader()
          ヘッダ部のデータを取得する。
protected  int getHeaderLineCount()
          ヘッダ行数を取得する。
protected  String getLineFeedChar()
          行区切り文字を取得する。
protected  int getTotalBytes()
          1行分のバイト数を取得する。
 List<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  String readLine()
          ファイルからデータ部のデータを1行分読み取り、文字列として呼出元に返却する。
 void remove()
          サポートしない。
protected abstract  String[] separateColumns(String fileLineString)
          データ部のデータ1行分をファイル行オブジェクトのアノテーションの記述に 従いカラムに分割する。
protected  void setLineFeedChar(String lineFeedChar)
          行区切り文字を設定する。
 void skip(int skipLines)
          データ部のデータを読み飛ばす処理を行う。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

AbstractFileLineIterator

public AbstractFileLineIterator(String fileName,
                                Class<T> clazz,
                                Map<String,ColumnParser> columnParserMap)
コンストラクタ。
引数のチェック及び、ファイル行オブジェクトのFileFormatアノテーション 設定のチェックを行う。
チェック結果問題がある場合は例外を発生する。

パラメータ:
fileName - ファイル名最後に移動
clazz - ファイル行オブジェクトクラス
columnParserMap - フォーマット処理リスト
例外:
FileException - 初期化処理で失敗した場合。
メソッドの詳細

hasNext

public boolean hasNext()
次の行のレコードがあるかどうか確認する。
繰り返し処理でさらに要素がある場合に true を返します。

定義:
インタフェース Iterator 内の hasNext
定義:
インタフェース FileLineIterator<T> 内の hasNext
戻り値:
繰り返し処理でさらに要素がある場合に true
例外:
FileException - リーダからIOExceptionが発生した場合。

next

public T next()
繰り返し処理でファイル行オブジェクトを返却する。

次の行のレコードの情報をファイル行オブジェクトに格納して返却します。
繰り返し処理で次の要素を返します。

次の行のレコードの情報はファイル行オブジェクトのInputFileColumnの定義に 基づいて格納される。
もし、ファイル行オブジェクトのマッピングフィールドの数と合わない レコード情報が来た場合は例外を発生する。
また、InputFileColumnに設定されたバイト数と違う情報が来た場合も例外を発生する。
それではない場合は以下の順番でデータを処理し格納する。
      
  • トリム処理
  •   
  • パディング処理
  •   
  • 文字列変換処理
  •   
  • 型変換(マッピング)処理

定義:
インタフェース Iterator 内の next
定義:
インタフェース FileLineIterator<T> 内の next
戻り値:
ファイル行オブジェクト
例外:
FileException - ファイル行オブジェクトの生成に失敗した場合。
FileLineException - ファイル行オブジェクトの取得に失敗した場合。

remove

public void remove()
サポートしない。
Iteratorで定義されているメソッド。
FileQueryDAOでは実装しないので、他のクラスから呼び出した場合、 UnsupportedOperationExceptionをスローする。

定義:
インタフェース Iterator 内の remove
例外:
UnsupportedOperationException - このメソッドはサポートしない。

init

protected void init()
初期化処理を行う。
初期化処理で行う処理は以下です。。
  • ファイル行オブジェクトの属性(Field)の取得
  • 文字変換種別オブジェクト(stringConverters)の生成
  • ファイル行オブジェクトの属性に対するセッタメソッド(methods)の取得
  • ファイルからデータを読込むためのLineReaderの生成
  • ヘッダ部の取得
  • トレイラキューの初期化
init()はAbstracFileLineIteratorを継承するクラスのコンストラクタで 呼ぶメソッドである。
下位互換性のため、2回以上実行できないようにしている。

例外:
FileException - 初期化処理で失敗した場合。
FileLineException - カラムに関連する初期化処理で失敗した場合。

closeFile

public void closeFile()
ファイル閉塞処理を行う。

定義:
インタフェース FileLineIterator<T> 内の closeFile
例外:
FileException - ファイル閉塞処理で失敗した場合。

getHeader

public List<String> getHeader()
ヘッダ部のデータを取得する。
データ部とトレイラ部の取得処理の実行可否と関係なくヘッダ部を取得することが 出来る。

定義:
インタフェース FileLineIterator<T> 内の getHeader
戻り値:
header ヘッダ部の文字列リスト

getTrailer

public List<String> getTrailer()
トレイラ部のデータを取得する。
トレイラ部のデータを取得するとデータ部のデータを取得することは出来ない。
理由はトレイラ部のデータ取得時に、データ部の情報を全部スキップするためです。
※注意事項
データ部のデータを全部取得する以前にトレイラ部を取得しないこと。

定義:
インタフェース FileLineIterator<T> 内の getTrailer
戻り値:
トレイラ部の文字列リスト
例外:
FileException - データ行取得処理で失敗した場合。

readLine

protected 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 String[] separateColumns(String fileLineString)
データ部のデータ1行分をファイル行オブジェクトのアノテーションの記述に 従いカラムに分割する。
引数fileLineStringnullもしくは 空文字の場合は、要素を持たない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 String getLineFeedChar()
行区切り文字を取得する。

戻り値:
行区切り文字

setLineFeedChar

protected void setLineFeedChar(String lineFeedChar)
行区切り文字を設定する。

パラメータ:
行区切り文字 -

getFileEncoding

protected String getFileEncoding()
ファイルエンコーディング取得する。

戻り値:
ファイルエンコーディング

getHeaderLineCount

protected int getHeaderLineCount()
ヘッダ行数を取得する。

戻り値:
ヘッダ行数

getTrailerLineCount

protected int getTrailerLineCount()
トレイラ行数を取得する。

戻り値:
トレイラ行数

getCurrentLineCount

public int getCurrentLineCount()
現在ファイル入力処理済みのデータ部内の行数を取得する。

戻り値:
ファイル入力処理済みのデータ部の行数。

getFields

protected Field[] getFields()
ファイル行オブジェクトのField情報(Annotation)を格納する変数を取得する。

戻り値:
ファイル行オブジェクトのField情報(Annotation)を格納する変数

getFileName

protected 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。


Copyright © 2011. All Rights Reserved.