クラス FileUtil

java.lang.Object
org.opengion.fukurou.fileexec.FileUtil

public final class FileUtil extends Object
FileUtilは、共通的に使用されるファイル操作関連のメソッドを集約した、ユーティリティークラスです。
 読み込みチェックや、書き出しチェックなどの簡易的な処理をまとめているだけです。

変更履歴:
7.0.0.0 (2017/07/07) 新規作成
導入されたバージョン:
JDK1.8,
  • フィールドの概要

    フィールド
    修飾子とタイプ
    フィールド
    説明
    static final int
    ファイルロックの獲得までのリトライ回数 10
    static final int
    ファイルロックの獲得までの待ち時間(ミリ秒) 2000
    static final int
    ファイルが安定するまでのリトライ回数 10
    static final int
    ファイルが安定するまでの待ち時間(ミリ秒) 2000
    static final Charset
    日本語用の、Windows-31J の、Charset
  • メソッドの概要

    修飾子とタイプ
    メソッド
    説明
    static Path
    backup(Path from, Path to)
    単体ファイルをバックアップフォルダに移動します。
    static Path
    backup(Path from, Path to, boolean useLock, boolean existsCheck, String sufix)
    パスの共有ロックを指定して、単体ファイルをバックアップフォルダに移動します。
    static Path
    backup(Path from, Path to, String sufix)
    単体ファイルをバックアップフォルダに移動します。
    static void
    copy(Path from, Path to)
    単体ファイルをコピーします。
    static void
    copy(Path from, Path to, boolean useLock)
    パスの共有ロックを指定した、単体ファイルをコピーします。
    static void
    delete(Path start)
    ファイルまたはフォルダ階層を削除します。
    static boolean
    exists(Path path)
    Pathオブジェクトが存在しているかどうかを判定します。
    static void
    forEach(Path inPath, Charset chset, Consumer<String> action)
    指定のパスから、1行づつ読み取った結果をConsumerにセットする繰り返しメソッドです。
    static void
    forEach(Path inPath, Consumer<String> action)
    指定のパスから、1行づつ読み取った結果をConsumerにセットする繰り返しメソッドです。
    static boolean
    ファイルアドレスが絶対パスかどうか[絶対パス: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
    lockPath(Path inPath, Consumer<Path> action)
    指定のパスを共有ロックして、Consumer#action(Path) メソッドを実行します。
    static void
    mergeFile(Path orgPath, Path bkup)
    オリジナルファイルにバックアップファイルの行を追記します。
    static void
    mkdirs(Path target, boolean parentCheck)
    引数のファイルパスを親階層を含めて生成します。
    static void
    move(Path from, Path to)
    単体ファイルを移動します。
    static void
    move(Path from, Path to, boolean useLock)
    パスの共有ロックを指定した、単体ファイルを移動します。
    static Path
    newPath(Path path, String fname)
    ファイルオブジェクトを作成します。
    static String
    Pathオブジェクトのファイル名(getFileName().toString()) を取得します。
    static List<String>
    ファイルからすべての行を読み取って、文字列のListとして返します。
    static Path
    readPath(String first, String... more)
    引数の文字列を連結した読み込み用パスのチェックを行い、存在する場合は、そのパスオブジェクトを返します。
    static void
    save(Path savePath, List<String> lines)
    指定のパスに1行単位の文字列のListを書き込んでいきます。
    static void
    save(Path savePath, List<String> lines, boolean append, Charset chset)
    指定のパスに1行単位の文字列のListを書き込んでいきます。
    static boolean
    指定のパスのファイルが、書き込まれている途中かどうかを判定し、落ち着くまで待ちます。
    static boolean
    stablePath(Path path, long sleep, int cnt)
    指定のパスのファイルが、書き込まれている途中かどうかを判定し、落ち着くまで待ちます。
    static String
    timeStamp(Path path, String format)
    指定のパスの最終更新日付を、文字列で返します。
    static Path
    writePath(String first, String... more)
    引数の文字列を連結した書き込み用パスを作成します。

    クラスから継承されたメソッド java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • フィールド詳細

  • メソッドの詳細

    • readPath

      public static Path readPath(String first, String... more)
      引数の文字列を連結した読み込み用パスのチェックを行い、存在する場合は、そのパスオブジェクトを返します。 Paths#get(String,String...) で作成したパスオブジェクトに存在チェックを加えたものです。 そのパスが存在しなければ、例外をThrowします。
      パラメータ:
      first - パス文字列またはパス文字列の最初の部分
      more - 結合してパス文字列を形成するための追加文字列
      戻り値:
      指定の文字列を連結したパスオブジェクト
      例外:
      RuntimeException - ファイル/フォルダは存在しない場合
      関連項目:
      変更履歴:
      1.0.0 (2016/04/28) 新規追加, 7.2.5.0 (2020/06/01) ネットワークパスのチェックを行います。
    • writePath

      public static Path writePath(String first, String... more)
      引数の文字列を連結した書き込み用パスを作成します。 Paths#get(String,String...) で作成したパスオブジェクトに存在チェックを加え、 そのパスが存在しなければ、作成します。 パスが、フォルダの場合は、そのまま作成し、ファイルの場合は、親フォルダまでを作成します。 パスがフォルダかファイルかの区別は、拡張子があるかどうかで判定します。
      パラメータ:
      first - パス文字列またはパス文字列の最初の部分
      more - 結合してパス文字列を形成するための追加文字列
      戻り値:
      指定の文字列を連結したパスオブジェクト
      例外:
      RuntimeException - ファイル/フォルダが作成できなかった場合
      関連項目:
      変更履歴:
      1.0.0 (2016/04/28) 新規追加
    • newPath

      public static Path newPath(Path path, String fname)
      ファイルオブジェクトを作成します。 通常は、フォルダ+ファイル名で、新しいファイルオブジェクトを作成します。 ここでは、第2引数のファイル名に、絶対パスを指定した場合は、第1引数の フォルダを使用せず、ファイル名だけで、ファイルオブジェクトを作成します。 第2引数のファイル名が、null か、ゼロ文字列の場合は、第1引数の フォルダを返します。
      パラメータ:
      path - 基準となるフォルダ(ファイルの場合は、親フォルダ基準)
      fname - ファイル名(絶対パス、または、相対パス)
      戻り値:
      合成されたファイルオブジェクト
      変更履歴:
      7.2.1.0 (2020/03/13) isAbsolute(String)を利用します。
    • isAbsolute

      public static boolean isAbsolute(String fname)
      ファイルアドレスが絶対パスかどうか[絶対パス:true]を判定します。 ファイル名が、絶対パス('/' か、'\\' か、2文字目が ':' の場合)かどうかを 判定して、絶対パスの場合は、true を返します。 それ以外(nullやゼロ文字列も含む)は、false になります。
      パラメータ:
      fname - ファイルパスの文字列(絶対パス、相対パス、null、ゼロ文字列)
      戻り値:
      絶対パスの場合は true
      変更履歴:
      7.2.1.0 (2020/03/13) 新規追加
    • mkdirs

      public static void mkdirs(Path target, boolean parentCheck)
      引数のファイルパスを親階層を含めて生成します。 すでに存在している場合や作成が成功した場合は、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

      public static void copy(Path from, Path to)
      単体ファイルをコピーします。 コピー先がなければ、コピー先のフォルダ階層を作成します。 コピー先がフォルダの場合は、コピー元と同じファイル名で、コピーします。 コピー先のファイルがすでに存在する場合は、上書きされますので、 必要であれば、先にバックアップしておいて下さい。
      パラメータ:
      from - コピー元となるファイル
      to - コピー先となるファイル
      例外:
      RuntimeException - ファイル操作に失敗した場合
      関連項目:
      変更履歴:
      1.0.0 (2016/04/28) 新規追加
    • copy

      public static void copy(Path from, Path to, boolean useLock)
      パスの共有ロックを指定した、単体ファイルをコピーします。 コピー先がなければ、コピー先のフォルダ階層を作成します。 コピー先がフォルダの場合は、コピー元と同じファイル名で、コピーします。 コピー先のファイルがすでに存在する場合は、上書きされますので、 必要であれば、先にバックアップしておいて下さい。 ※ 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

      public static void move(Path from, Path to)
      単体ファイルを移動します。 移動先がなければ、移動先のフォルダ階層を作成します。 移動先がフォルダの場合は、移動元と同じファイル名で、移動します。 移動先のファイルがすでに存在する場合は、上書きされますので、 必要であれば、先にバックアップしておいて下さい。
      パラメータ:
      from - 移動元となるファイル
      to - 移動先となるファイル
      例外:
      RuntimeException - ファイル操作に失敗した場合
      関連項目:
      変更履歴:
      1.0.0 (2016/04/28) 新規追加
    • move

      public static void move(Path from, Path to, boolean useLock)
      パスの共有ロックを指定した、単体ファイルを移動します。 移動先がなければ、移動先のフォルダ階層を作成します。 移動先がフォルダの場合は、移動元と同じファイル名で、移動します。 移動先のファイルがすでに存在する場合は、上書きされますので、 必要であれば、先にバックアップしておいて下さい。 ※ 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

      public static Path backup(Path from, Path to, String sufix)
      単体ファイルをバックアップフォルダに移動します。 これは、#backup( from,to,true,false,sufix ); と同じ処理を実行します。 移動先は、フォルダ指定で、ファイル名は存在チェックせずに、必ず変更します。 その際、移動元+サフィックス のファイルを作成します。 ファイルのロックを行います。
      パラメータ:
      from - 移動元となるファイル
      to - 移動先となるフォルダ(nullの場合は、移動元と同じフォルダ)
      sufix - バックアップファイル名の後ろに付ける文字列
      戻り値:
      バックアップしたファイルパス。
      例外:
      RuntimeException - ファイル操作に失敗した場合
      関連項目:
      変更履歴:
      1.0.0 (2016/04/28) 新規追加
    • backup

      public static Path backup(Path from, Path to)
      単体ファイルをバックアップフォルダに移動します。 これは、#backup( from,to,true,true ); と同じ処理を実行します。 移動先は、フォルダ指定で、ファイル名は存在チェックの上で、無ければ移動、 あれば、移動元+時間情報 のファイルを作成します。 ファイルのロックを行います。 移動先を指定しない(=null)場合は、自分自身のフォルダでの、ファイル名変更になります。
      パラメータ:
      from - 移動元となるファイル
      to - 移動先となるフォルダ(nullの場合は、移動元と同じフォルダ)
      戻り値:
      バックアップしたファイルパス。
      例外:
      RuntimeException - ファイル操作に失敗した場合
      関連項目:
      変更履歴:
      1.0.0 (2016/04/28) 新規追加
    • backup

      public static Path backup(Path from, Path to, boolean useLock, boolean existsCheck, String sufix)
      パスの共有ロックを指定して、単体ファイルをバックアップフォルダに移動します。 移動先のファイル名は、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

      public static void mergeFile(Path orgPath, Path bkup)
      オリジナルファイルにバックアップファイルの行を追記します。 オリジナルファイルに、バックアップファイルから読み取った行を追記していきます。 処理する条件は、オリジナルファイルとバックアップファイルが異なる場合のみ、実行されます。 また、バックアップファイルから、追記する行で、COUNT,TIME,DATE の要素を持つ 行は、RPTファイルの先頭行なので、除外します。
      パラメータ:
      orgPath - 追加されるオリジナルのパス名
      bkup - 行データを取り出すバックアップファイル
      変更履歴:
      7.2.5.0 (2020/06/01) 新規追加。, 8.0.0.0 (2021/07/01) STATIC_LOCKのsynchronized作成
    • delete

      public static void delete(Path start)
      ファイルまたはフォルダ階層を削除します。 これは、指定のパスが、フォルダの場合、階層すべてを削除します。 階層の途中にファイル等が存在していたとしても、削除します。 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

      public static boolean stablePath(Path path)
      指定のパスのファイルが、書き込まれている途中かどうかを判定し、落ち着くまで待ちます。 FileUtil.stablePath( path , STABLE_SLEEP_TIME , STABLE_RETRY_COUNT ); と同じです。
      パラメータ:
      path - チェックするパスオブジェクト
      戻り値:
      true:安定した/false:安定しなかった。またはファイルが存在していない。
      関連項目:
    • stablePath

      public static boolean stablePath(Path path, long sleep, int cnt)
      指定のパスのファイルが、書き込まれている途中かどうかを判定し、落ち着くまで待ちます。 ファイルの安定は、ファイルのサイズをチェックすることで求めます。まず、サイズをチェックし、 sleepで指定した時間だけ、Thread.sleepします。再び、サイズをチェックして、同じであれば、 安定したとみなします。 なので、必ず、sleep で指定したミリ秒だけは、待ちます。 ファイルが存在しない、サイズが、0のままか、チェック回数を過ぎても安定しない場合は、 false が返ります。 サイズを求める際に、IOExceptionが発生した場合でも、falseを返します。
      パラメータ:
      path - チェックするパスオブジェクト
      sleep - 待機する時間(ミリ秒)
      cnt - チェックする回数
      戻り値:
      true:安定した/false:安定しなかった。またはファイルが存在していない。
      変更履歴:
      7.2.5.0 (2020/06/01) ネットワークパスのチェックを行います。
    • lockPath

      public static void lockPath(Path inPath, Consumer<Path> action)
      指定のパスを共有ロックして、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

      public static void forEach(Path inPath, Consumer<String> action)
      指定のパスから、1行づつ読み取った結果をConsumerにセットする繰り返しメソッドです。 1行単位に、Consumer#action が呼ばれます。 このメソッドでは、Charset は、UTF-8 です。 ファイルを順次読み込むため、内部メモリを圧迫しません。
      パラメータ:
      inPath - 処理対象のPathオブジェクト
      action - 行を引数に取るConsumerオブジェクト
      例外:
      RuntimeException - ファイル読み込み時にエラーが発生した場合
      関連項目:
    • forEach

      public static void forEach(Path inPath, Charset chset, Consumer<String> action)
      指定のパスから、1行づつ読み取った結果をConsumerにセットする繰り返しメソッドです。 1行単位に、Consumer#action が呼ばれます。 ファイルを順次読み込むため、内部メモリを圧迫しません。
      パラメータ:
      inPath - 処理対象のPathオブジェクト
      chset - ファイルを読み取るときのCharset
      action - 行を引数に取るConsumerオブジェクト
      例外:
      RuntimeException - ファイル読み込み時にエラーが発生した場合
      関連項目:
      変更履歴:
      7.2.5.0 (2020/06/01) ネットワークパスのチェックを行います。
    • lockForEach

      public static void lockForEach(Path inPath, Consumer<String> action)
      指定のパスを共有ロックして、1行づつ読み取った結果をConsumerにセットする繰り返しメソッドです。 1行単位に、Consumer#action が呼ばれます。 ファイルを順次読み込むため、内部メモリを圧迫しません。
      パラメータ:
      inPath - 処理対象のPathオブジェクト
      action - 行を引数に取るConsumerオブジェクト
      関連項目:
    • lockForEach

      public static void lockForEach(Path inPath, Charset chset, Consumer<String> action)
      指定のパスを共有ロックして、1行づつ読み取った結果をConsumerにセットする繰り返しメソッドです。 1行単位に、Consumer#action が呼ばれます。 ファイルを順次読み込むため、内部メモリを圧迫しません。
      パラメータ:
      inPath - 処理対象のPathオブジェクト
      chset - エンコードを指定するCharsetオブジェクト
      action - 行を引数に取るConsumerオブジェクト
      関連項目:
    • save

      public static void save(Path savePath, List<String> lines)
      指定のパスに1行単位の文字列のListを書き込んでいきます。 1行単位の文字列のListを作成しますので、大きなファイルの作成には向いていません。 書き込むパスの親フォルダがなければ作成します。 第2引数は、書き込む行データです。 このメソッドでは、Charset は、UTF-8 です。
      パラメータ:
      savePath - セーブするパスオブジェクト
      lines - 行単位の書き込むデータ
      例外:
      RuntimeException - ファイル操作に失敗した場合
      関連項目:
      変更履歴:
      1.0.0 (2016/04/28) 新規追加
    • save

      public static void save(Path savePath, List<String> lines, boolean append, Charset chset)
      指定のパスに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

      public static String timeStamp(Path path, String format)
      指定のパスの最終更新日付を、文字列で返します。 文字列のフォーマット指定も可能です。 パスが無い場合や、最終更新日付を、取得できない場合は、現在時刻をベースに返します。
      パラメータ:
      path - 処理対象のPathオブジェクト
      format - 文字列化する場合のフォーマット(yyyyMMddHHmmss)
      戻り値:
      指定のパスの最終更新日付の文字列
      変更履歴:
      7.2.5.0 (2020/06/01) ネットワークパスのチェックを行います。, 8.0.0.0 (2021/07/01) STATIC_LOCKのsynchronized作成
    • readAllLines

      public static List<String> readAllLines(Path path) throws IOException
      ファイルからすべての行を読み取って、文字列の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

      public static boolean exists(Path path)
      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

      public static String pathFileName(Path path)
      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を返しません