クラス FileUtil
java.lang.Object
org.opengion.fukurou.fileexec.FileUtil
FileUtilは、共通的に使用されるファイル操作関連のメソッドを集約した、ユーティリティークラスです。
読み込みチェックや、書き出しチェックなどの簡易的な処理をまとめているだけです。
- 変更履歴:
- 7.0.0.0 (2017/07/07) 新規作成
- 導入されたバージョン:
- JDK1.8,
-
フィールドの概要
フィールド修飾子とタイプフィールド説明static final int
ファイルロックの獲得までのリトライ回数 10static final int
ファイルロックの獲得までの待ち時間(ミリ秒) 2000static final int
ファイルが安定するまでのリトライ回数 10static final int
ファイルが安定するまでの待ち時間(ミリ秒) 2000static final Charset
日本語用の、Windows-31J の、Charset -
メソッドの概要
修飾子とタイプメソッド説明static Path
単体ファイルをバックアップフォルダに移動します。static Path
パスの共有ロックを指定して、単体ファイルをバックアップフォルダに移動します。static Path
単体ファイルをバックアップフォルダに移動します。static void
単体ファイルをコピーします。static void
パスの共有ロックを指定した、単体ファイルをコピーします。static void
ファイルまたはフォルダ階層を削除します。static boolean
Pathオブジェクトが存在しているかどうかを判定します。static void
指定のパスから、1行づつ読み取った結果をConsumerにセットする繰り返しメソッドです。static void
指定のパスから、1行づつ読み取った結果をConsumerにセットする繰り返しメソッドです。static boolean
isAbsolute
(String fname) ファイルアドレスが絶対パスかどうか[絶対パス:true]を判定します。static void
lockForEach
(Path inPath, Charset chset, Consumer<String> action) 指定のパスを共有ロックして、1行づつ読み取った結果をConsumerにセットする繰り返しメソッドです。static void
lockForEach
(Path inPath, Consumer<String> action) 指定のパスを共有ロックして、1行づつ読み取った結果をConsumerにセットする繰り返しメソッドです。static void
指定のパスを共有ロックして、Consumer#action(Path) メソッドを実行します。static void
オリジナルファイルにバックアップファイルの行を追記します。static void
引数のファイルパスを親階層を含めて生成します。static void
単体ファイルを移動します。static void
パスの共有ロックを指定した、単体ファイルを移動します。static Path
ファイルオブジェクトを作成します。static String
pathFileName
(Path path) Pathオブジェクトのファイル名(getFileName().toString()) を取得します。readAllLines
(Path path) ファイルからすべての行を読み取って、文字列のListとして返します。static Path
引数の文字列を連結した読み込み用パスのチェックを行い、存在する場合は、そのパスオブジェクトを返します。static void
指定のパスに1行単位の文字列のListを書き込んでいきます。static void
指定のパスに1行単位の文字列のListを書き込んでいきます。static boolean
stablePath
(Path path) 指定のパスのファイルが、書き込まれている途中かどうかを判定し、落ち着くまで待ちます。static boolean
stablePath
(Path path, long sleep, int cnt) 指定のパスのファイルが、書き込まれている途中かどうかを判定し、落ち着くまで待ちます。static String
指定のパスの最終更新日付を、文字列で返します。static Path
引数の文字列を連結した書き込み用パスを作成します。
-
フィールド詳細
-
STABLE_SLEEP_TIME
ファイルが安定するまでの待ち時間(ミリ秒) 2000- 関連項目:
-
STABLE_RETRY_COUNT
ファイルが安定するまでのリトライ回数 10- 関連項目:
-
LOCK_SLEEP_TIME
ファイルロックの獲得までの待ち時間(ミリ秒) 2000- 関連項目:
-
LOCK_RETRY_COUNT
ファイルロックの獲得までのリトライ回数 10- 関連項目:
-
WINDOWS_31J
日本語用の、Windows-31J の、Charset
-
-
メソッドの詳細
-
readPath
引数の文字列を連結した読み込み用パスのチェックを行い、存在する場合は、そのパスオブジェクトを返します。 Paths#get(String,String...) で作成したパスオブジェクトに存在チェックを加えたものです。 そのパスが存在しなければ、例外をThrowします。- パラメータ:
first
- パス文字列またはパス文字列の最初の部分more
- 結合してパス文字列を形成するための追加文字列- 戻り値:
- 指定の文字列を連結したパスオブジェクト
- 例外:
RuntimeException
- ファイル/フォルダは存在しない場合- 関連項目:
- 変更履歴:
- 1.0.0 (2016/04/28) 新規追加, 7.2.5.0 (2020/06/01) ネットワークパスのチェックを行います。
-
writePath
引数の文字列を連結した書き込み用パスを作成します。 Paths#get(String,String...) で作成したパスオブジェクトに存在チェックを加え、 そのパスが存在しなければ、作成します。 パスが、フォルダの場合は、そのまま作成し、ファイルの場合は、親フォルダまでを作成します。 パスがフォルダかファイルかの区別は、拡張子があるかどうかで判定します。- パラメータ:
first
- パス文字列またはパス文字列の最初の部分more
- 結合してパス文字列を形成するための追加文字列- 戻り値:
- 指定の文字列を連結したパスオブジェクト
- 例外:
RuntimeException
- ファイル/フォルダが作成できなかった場合- 関連項目:
- 変更履歴:
- 1.0.0 (2016/04/28) 新規追加
-
newPath
ファイルオブジェクトを作成します。 通常は、フォルダ+ファイル名で、新しいファイルオブジェクトを作成します。 ここでは、第2引数のファイル名に、絶対パスを指定した場合は、第1引数の フォルダを使用せず、ファイル名だけで、ファイルオブジェクトを作成します。 第2引数のファイル名が、null か、ゼロ文字列の場合は、第1引数の フォルダを返します。- パラメータ:
path
- 基準となるフォルダ(ファイルの場合は、親フォルダ基準)fname
- ファイル名(絶対パス、または、相対パス)- 戻り値:
- 合成されたファイルオブジェクト
- 変更履歴:
- 7.2.1.0 (2020/03/13) isAbsolute(String)を利用します。
-
isAbsolute
ファイルアドレスが絶対パスかどうか[絶対パス:true]を判定します。 ファイル名が、絶対パス('/' か、'\\' か、2文字目が ':' の場合)かどうかを 判定して、絶対パスの場合は、true を返します。 それ以外(nullやゼロ文字列も含む)は、false になります。- パラメータ:
fname
- ファイルパスの文字列(絶対パス、相対パス、null、ゼロ文字列)- 戻り値:
- 絶対パスの場合は true
- 変更履歴:
- 7.2.1.0 (2020/03/13) 新規追加
-
mkdirs
引数のファイルパスを親階層を含めて生成します。 すでに存在している場合や作成が成功した場合は、true を返します。 作成に失敗した場合は、false です。 指定のファイルパスは、フォルダであることが前提ですが、簡易的に ファイルの場合は、その親階層のフォルダを作成します。 ファイルかフォルダの判定は、拡張子があるか、ないかで判定します。- パラメータ:
target
- ターゲットのファイルパスparentCheck
- 先に親フォルダの作成を行うかどうか(true:行う)- 例外:
RuntimeException
- フォルダの作成に失敗した場合- 変更履歴:
- 1.0.0 (2016/04/28) 新規追加, 7.2.5.0 (2020/06/01) ネットワークパスのチェックを行います。, 8.0.0.0 (2021/07/01) STATIC_LOCKのsynchronized作成
-
copy
単体ファイルをコピーします。 コピー先がなければ、コピー先のフォルダ階層を作成します。 コピー先がフォルダの場合は、コピー元と同じファイル名で、コピーします。 コピー先のファイルがすでに存在する場合は、上書きされますので、 必要であれば、先にバックアップしておいて下さい。- パラメータ:
from
- コピー元となるファイルto
- コピー先となるファイル- 例外:
RuntimeException
- ファイル操作に失敗した場合- 関連項目:
- 変更履歴:
- 1.0.0 (2016/04/28) 新規追加
-
copy
パスの共有ロックを指定した、単体ファイルをコピーします。 コピー先がなければ、コピー先のフォルダ階層を作成します。 コピー先がフォルダの場合は、コピー元と同じファイル名で、コピーします。 コピー先のファイルがすでに存在する場合は、上書きされますので、 必要であれば、先にバックアップしておいて下さい。 ※ copy に関しては、コピー時間を最小化する意味で、synchronized しています。- パラメータ:
from
- コピー元となるファイルto
- コピー先となるファイルuseLock
- パスを共有ロックするかどうか- 例外:
RuntimeException
- ファイル操作に失敗した場合- 関連項目:
- 変更履歴:
- 1.0.0 (2016/04/28) 新規追加, 7.2.5.0 (2020/06/01) ネットワークパスのチェックを行います。, 7.3.1.3 (2021/03/09) 処理の直前にロックを掛けてから存在チェックを行います。
-
move
単体ファイルを移動します。 移動先がなければ、移動先のフォルダ階層を作成します。 移動先がフォルダの場合は、移動元と同じファイル名で、移動します。 移動先のファイルがすでに存在する場合は、上書きされますので、 必要であれば、先にバックアップしておいて下さい。- パラメータ:
from
- 移動元となるファイルto
- 移動先となるファイル- 例外:
RuntimeException
- ファイル操作に失敗した場合- 関連項目:
- 変更履歴:
- 1.0.0 (2016/04/28) 新規追加
-
move
パスの共有ロックを指定した、単体ファイルを移動します。 移動先がなければ、移動先のフォルダ階層を作成します。 移動先がフォルダの場合は、移動元と同じファイル名で、移動します。 移動先のファイルがすでに存在する場合は、上書きされますので、 必要であれば、先にバックアップしておいて下さい。 ※ move に関しては、ムーブ時間を最小化する意味で、synchronized しています。- パラメータ:
from
- 移動元となるファイルto
- 移動先となるファイルuseLock
- パスを共有ロックするかどうか- 例外:
RuntimeException
- ファイル操作に失敗した場合- 関連項目:
- 変更履歴:
- 1.0.0 (2016/04/28) 新規追加, 7.2.1.0 (2020/03/13) from,to が null の場合、処理しない。, 7.2.5.0 (2020/06/01) ネットワークパスのチェックを行います。, 7.3.1.3 (2021/03/09) 処理の直前にロックを掛けてから存在チェックを行います。
-
backup
単体ファイルをバックアップフォルダに移動します。 これは、#backup( from,to,true,false,sufix ); と同じ処理を実行します。 移動先は、フォルダ指定で、ファイル名は存在チェックせずに、必ず変更します。 その際、移動元+サフィックス のファイルを作成します。 ファイルのロックを行います。- パラメータ:
from
- 移動元となるファイルto
- 移動先となるフォルダ(nullの場合は、移動元と同じフォルダ)sufix
- バックアップファイル名の後ろに付ける文字列- 戻り値:
- バックアップしたファイルパス。
- 例外:
RuntimeException
- ファイル操作に失敗した場合- 関連項目:
- 変更履歴:
- 1.0.0 (2016/04/28) 新規追加
-
backup
単体ファイルをバックアップフォルダに移動します。 これは、#backup( from,to,true,true ); と同じ処理を実行します。 移動先は、フォルダ指定で、ファイル名は存在チェックの上で、無ければ移動、 あれば、移動元+時間情報 のファイルを作成します。 ファイルのロックを行います。 移動先を指定しない(=null)場合は、自分自身のフォルダでの、ファイル名変更になります。- パラメータ:
from
- 移動元となるファイルto
- 移動先となるフォルダ(nullの場合は、移動元と同じフォルダ)- 戻り値:
- バックアップしたファイルパス。
- 例外:
RuntimeException
- ファイル操作に失敗した場合- 関連項目:
- 変更履歴:
- 1.0.0 (2016/04/28) 新規追加
-
backup
パスの共有ロックを指定して、単体ファイルをバックアップフォルダに移動します。 移動先のファイル名は、existsCheckが、trueの場合は、移動先のファイル名をチェックして、 存在しなければ、移動元と同じファイル名で、バックアップフォルダに移動します。 存在すれば、ファイル名+サフィックス のファイルを作成します。(拡張子より後ろにサフィックスを追加します。) existsCheckが、false の場合は、無条件に、移動元のファイル名に、サフィックスを追加します。 サフィックスがnullの場合は、時間情報になります。 移動先を指定しない(=null)場合は、自分自身のフォルダでの、ファイル名変更になります。- パラメータ:
from
- 移動元となるファイルto
- 移動先となるフォルダ(nullの場合は、移動元と同じフォルダ)useLock
- パスを共有ロックするかどうかexistsCheck
- 移動先のファイル存在チェックを行うかどうか(true:行う/false:行わない)sufix
- バックアップファイル名の後ろに付ける文字列- 戻り値:
- バックアップしたファイルパス。
- 例外:
RuntimeException
- ファイル操作に失敗した場合- 関連項目:
- 変更履歴:
- 1.0.0 (2016/04/28) 新規追加, 6.9.8.0 (2018/05/28) FindBugs:null になっている可能性があるメソッドの戻り値を利用している, 7.2.1.0 (2020/03/13) ファイル名変更処理の修正, 7.2.5.0 (2020/06/01) toパスに、環境変数と日付文字列置換機能を追加します。
-
mergeFile
オリジナルファイルにバックアップファイルの行を追記します。 オリジナルファイルに、バックアップファイルから読み取った行を追記していきます。 処理する条件は、オリジナルファイルとバックアップファイルが異なる場合のみ、実行されます。 また、バックアップファイルから、追記する行で、COUNT,TIME,DATE の要素を持つ 行は、RPTファイルの先頭行なので、除外します。- パラメータ:
orgPath
- 追加されるオリジナルのパス名bkup
- 行データを取り出すバックアップファイル- 変更履歴:
- 7.2.5.0 (2020/06/01) 新規追加。, 8.0.0.0 (2021/07/01) STATIC_LOCKのsynchronized作成
-
delete
ファイルまたはフォルダ階層を削除します。 これは、指定のパスが、フォルダの場合、階層すべてを削除します。 階層の途中にファイル等が存在していたとしても、削除します。 Files.walkFileTree(Path,FileVisitor) を使用したファイル・ツリーの削除方式です。- パラメータ:
start
- 削除開始ファイル- 例外:
RuntimeException
- ファイル操作に失敗した場合- 変更履歴:
- 1.0.0 (2016/04/28) 新規追加, 7.2.5.0 (2020/06/01) ネットワークパスのチェックを行います。, 8.0.0.0 (2021/07/01) STATIC_LOCKのsynchronized作成
-
stablePath
指定のパスのファイルが、書き込まれている途中かどうかを判定し、落ち着くまで待ちます。 FileUtil.stablePath( path , STABLE_SLEEP_TIME , STABLE_RETRY_COUNT ); と同じです。- パラメータ:
path
- チェックするパスオブジェクト- 戻り値:
- true:安定した/false:安定しなかった。またはファイルが存在していない。
- 関連項目:
-
stablePath
指定のパスのファイルが、書き込まれている途中かどうかを判定し、落ち着くまで待ちます。 ファイルの安定は、ファイルのサイズをチェックすることで求めます。まず、サイズをチェックし、 sleepで指定した時間だけ、Thread.sleepします。再び、サイズをチェックして、同じであれば、 安定したとみなします。 なので、必ず、sleep で指定したミリ秒だけは、待ちます。 ファイルが存在しない、サイズが、0のままか、チェック回数を過ぎても安定しない場合は、 false が返ります。 サイズを求める際に、IOExceptionが発生した場合でも、falseを返します。- パラメータ:
path
- チェックするパスオブジェクトsleep
- 待機する時間(ミリ秒)cnt
- チェックする回数- 戻り値:
- true:安定した/false:安定しなかった。またはファイルが存在していない。
- 変更履歴:
- 7.2.5.0 (2020/06/01) ネットワークパスのチェックを行います。
-
lockPath
指定のパスを共有ロックして、Consumer#action(Path) メソッドを実行します。 共有ロック中は、ファイルを読み込むことは出来ますが、書き込むことは出来なくなります。 共有ロックの取得は、10 回実行し、2000 ミリ秒待機します。- パラメータ:
inPath
- 処理対象のPathオブジェクトaction
- パスを引数に取るConsumerオブジェクト- 例外:
RuntimeException
- ファイル読み込み時にエラーが発生した場合- 関連項目:
- 変更履歴:
- 7.2.5.0 (2020/06/01) ネットワークパスのチェックを行います。, 7.4.4.0 (2021/06/30) NoSuchFileException 時は、メッセージのみ表示する。
-
forEach
指定のパスから、1行づつ読み取った結果をConsumerにセットする繰り返しメソッドです。 1行単位に、Consumer#action が呼ばれます。 このメソッドでは、Charset は、UTF-8 です。 ファイルを順次読み込むため、内部メモリを圧迫しません。- パラメータ:
inPath
- 処理対象のPathオブジェクトaction
- 行を引数に取るConsumerオブジェクト- 例外:
RuntimeException
- ファイル読み込み時にエラーが発生した場合- 関連項目:
-
forEach
指定のパスから、1行づつ読み取った結果をConsumerにセットする繰り返しメソッドです。 1行単位に、Consumer#action が呼ばれます。 ファイルを順次読み込むため、内部メモリを圧迫しません。- パラメータ:
inPath
- 処理対象のPathオブジェクトchset
- ファイルを読み取るときのCharsetaction
- 行を引数に取るConsumerオブジェクト- 例外:
RuntimeException
- ファイル読み込み時にエラーが発生した場合- 関連項目:
- 変更履歴:
- 7.2.5.0 (2020/06/01) ネットワークパスのチェックを行います。
-
lockForEach
指定のパスを共有ロックして、1行づつ読み取った結果をConsumerにセットする繰り返しメソッドです。 1行単位に、Consumer#action が呼ばれます。 ファイルを順次読み込むため、内部メモリを圧迫しません。- パラメータ:
inPath
- 処理対象のPathオブジェクトaction
- 行を引数に取るConsumerオブジェクト- 関連項目:
-
lockForEach
指定のパスを共有ロックして、1行づつ読み取った結果をConsumerにセットする繰り返しメソッドです。 1行単位に、Consumer#action が呼ばれます。 ファイルを順次読み込むため、内部メモリを圧迫しません。- パラメータ:
inPath
- 処理対象のPathオブジェクトchset
- エンコードを指定するCharsetオブジェクトaction
- 行を引数に取るConsumerオブジェクト- 関連項目:
-
save
指定のパスに1行単位の文字列のListを書き込んでいきます。 1行単位の文字列のListを作成しますので、大きなファイルの作成には向いていません。 書き込むパスの親フォルダがなければ作成します。 第2引数は、書き込む行データです。 このメソッドでは、Charset は、UTF-8 です。- パラメータ:
savePath
- セーブするパスオブジェクトlines
- 行単位の書き込むデータ- 例外:
RuntimeException
- ファイル操作に失敗した場合- 関連項目:
- 変更履歴:
- 1.0.0 (2016/04/28) 新規追加
-
save
指定のパスに1行単位の文字列のListを書き込んでいきます。 1行単位の文字列のListを作成しますので、大きなファイルの作成には向いていません。 書き込むパスの親フォルダがなければ作成します。 第2引数は、書き込む行データです。- パラメータ:
savePath
- セーブするパスオブジェクトlines
- 行単位の書き込むデータappend
- trueの場合、ファイルの先頭ではなく最後に書き込まれる。chset
- ファイルを読み取るときのCharset- 例外:
RuntimeException
- ファイル操作に失敗した場合- 変更履歴:
- 1.0.0 (2016/04/28) 新規追加, 7.2.5.0 (2020/06/01) BOM付きファイルを append する場合の対処, 8.0.0.0 (2021/07/01) STATIC_LOCKのsynchronized作成
-
timeStamp
指定のパスの最終更新日付を、文字列で返します。 文字列のフォーマット指定も可能です。 パスが無い場合や、最終更新日付を、取得できない場合は、現在時刻をベースに返します。- パラメータ:
path
- 処理対象のPathオブジェクトformat
- 文字列化する場合のフォーマット(yyyyMMddHHmmss)- 戻り値:
- 指定のパスの最終更新日付の文字列
- 変更履歴:
- 7.2.5.0 (2020/06/01) ネットワークパスのチェックを行います。, 8.0.0.0 (2021/07/01) STATIC_LOCKのsynchronized作成
-
readAllLines
ファイルからすべての行を読み取って、文字列のListとして返します。 java.nio.file.Files#readAllLines(Path ) と同等ですが、ファイルが UTF-8 でない場合 即座にエラーにするのではなく、Windows-31J でも読み取りを試みます。 それでもダメな場合は、IOException をスローします。- パラメータ:
path
- 読み取り対象のPathオブジェクト- 戻り値:
- Listとしてファイルからの行
- 例外:
IOException
- 読み取れない場合エラー- 変更履歴:
- 7.2.5.0 (2020/06/01) Files.readAllLines の代用, 7.3.1.3 (2021/03/09) 読み込み処理全体に、try ~ catch を掛けておきます。, 8.0.0.0 (2021/07/01) STATIC_LOCKのsynchronized作成
-
exists
Pathオブジェクトが存在しているかどうかを判定します。 java.nio.file.Files#exists( Path ) を使用せず、java.io.File.exists() で判定します。 https://codeday.me/jp/qa/20190302/349168.html ネットワークフォルダに存在するファイルの判定において、Files#exists( Path )と File.exists() の結果が異なることがあります。 ここでは、File#exists() を使用して判定します。- パラメータ:
path
- 判定対象のPathオブジェクト- 戻り値:
- ファイルの存在チェック(あればtrue)
- 変更履歴:
- 7.2.5.0 (2020/06/01) Files.exists の代用
-
pathFileName
Pathオブジェクトのファイル名(getFileName().toString()) を取得します。 Path#getFileName() では、結果が null になる場合もあり、そのままでは、toString() できません。 また、引数の Path も null チェックが必要なので、それらを簡易的に行います。 何らかの結果が、null の場合は、""(空文字列)を返します。- パラメータ:
path
- ファイル名取得元のPathオブジェクト(nullも可)- 戻り値:
- ファイル名(nullの場合は、空文字列)
- 変更履歴:
- 7.2.9.4 (2020/11/20) Path.getFileName().toString() の簡易版
- このメソッドは、nullを返しません
-