commons-io に見るファイル操作処理のヒント(FileUtils編その2)

公開日: : 最終更新日:2014/01/27 commons-io ,

commons-io の JavaDoc とソースコードを眺めて発見した便利なメソッドや実装のヒントになりそうなスニペットのメモ企画。

今回も FileUtils (Commons IO 2.4 API) です。

commons-io に見るファイル操作処理のヒント(FileUtils編その1) の続き。

commons-io

目次

1. ファイルを全文読み込んで String 型の変数に格納する

  • readFileToString(File file)
  • readFileToString(File file, Charset encoding)
  • readFileToString(File file, String encoding)

これは使わないかもしれないなぁ。

IOUtils にも同じような働きをする次のメソッドが用意されています(一部抜粋)。

  • IOUtils#toString(InputStream input)
  • IOUtils#toString(InputStream input, String encoding)

実ファイルから読み込む場合は FileUtils のメソッドを使い、ストリームから読み込む場合は IOUtils のメソッドを使えば良さそう。

2. ファイルを全文読み込んで、List に格納する

  • readLines(File file)
  • readLines(File file, Charset encoding)
  • readLines(File file, String encoding)

FileUtils#readFileToString(File file) よりかは使用頻度が高そうな気がしたのでメモ。

IOUtils にも同じ働きをする次のメソッドが用意されています。

  • IOUtils#readLines(InputStream input)
  • IOUtils#readLines(InputStream input, Charset encoding)
  • IOUtils#readLines(InputStream input, String encoding)
  • IOUtils#readLines(Reader input)

3. 文字列をファイルに書き込む

  • writeStringToFile(File file, String data)
  • writeStringToFile(File file, String data, boolean append)
  • writeStringToFile(File file, String data, Charset encoding)
  • writeStringToFile(File file, String data, Charset encoding, boolean append)
  • writeStringToFile(File file, String data, String encoding)
  • writeStringToFile(File file, String data, String encoding, boolean append)

これは非常に便利。ファイルに書き込むあの典型的なコードをこの1行だけで済ませられるのは嬉しい。

4. List に格納されている文字列をファイルに書き込む

  • writeLines(File file, Collection<?> lines)
  • writeLines(File file, Collection<?> lines, boolean append)
  • writeLines(File file, Collection<?> lines, String lineEnding)
  • writeLines(File file, Collection<?> lines, String lineEnding, boolean append)
  • writeLines(File file, String encoding, Collection<?> lines)
  • writeLines(File file, String encoding, Collection<?> lines, boolean append)
  • writeLines(File file, String encoding, Collection<?> lines, String lineEnding)
  • writeLines(File file, String encoding, Collection<?> lines, String lineEnding, boolean append)

もしかしたら FileUtils#writeStringToFile よりもこちらのほうが便利かもしれない。

ちょろっとした文字列をファイルに書き込む場合は FileUtils#writeStringToFile を使い、複数行の文字列をファイルに書き込む場合は FileUtils#writeLines を使うといった使い分けができそう。

5. ディレクトリを作成する

  • forceMkdir(File directory)

引数の directory が参照するモノは存在しているが、ディレクトリではなかった場合に例外を投げるようになっています。

また、directory が存在していなければディレクトリは作成しますが、作成に失敗した場合にも例外を投げるようになっています。

↓ はこのメソッドのソースコードなんですが、どういう部分が force なんだろう。。。

public static void forceMkdir(File directory) throws IOException {
    if (directory.exists()) {
        if (!directory.isDirectory()) {
            String message =
                "File "
                    + directory
                    + " exists and is "
                    + "not a directory. Unable to create directory.";
            throw new IOException(message);
        }
    } else {
        if (!directory.mkdirs()) {
            // Double-check that some other thread or process hasn't made
            // the directory in the background
            if (!directory.isDirectory())
            {
                String message =
                    "Unable to create directory " + directory;
                throw new IOException(message);
            }
        }
    }
}

6. ファイルやディレクトリのファイルサイズを測る

  • sizeOf(File file)
  • sizeOfDirectory(File directory)

アップロードされたファイルの容量チェックに使えそうなのでメモ。

sizeOf メソッドの引数にディレクトリを指定しても、内部で sizeOfDirectory を呼ぶ実装になっているので、sizeOf メソッドだけを使えば良さそう。

7. 指定した値と比較してファイルの更新日時が新しいかを判定する

  • isFileNewer(File file, Date date)
  • isFileNewer(File file, File reference)
  • isFileNewer(File file, long timeMillis)

ファイル同士でも比較できるし、Date 型とも比較できるのが便利。

8. 指定した値と比較してファイルの更新日時が古いかを判定する

  • isFileOlder(File file, Date date)
  • isFileOlder(File file, File reference)
  • isFileOlder(File file, long timeMillis)

isFileNewer と同様に File でも Date でも比較できるのが便利。

9. その他の commons-io に関する記事

commons-io に関する記事は次の通りです。
気になる記事があったらぜひチェックしてみてください!

Googleアドセンス用(PC)

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

関連記事

icatch-8969238685_14dd418b01_z-resized

DirectoryFileFilter を使ったフィルタ処理のサンプル

Commons IO の org.apache.commons.io.filefilter (Com

記事を読む

icatch-8597609828_ab32aba876_z-resized

SizeFileFilter を使ったフィルタ処理のサンプル

Commons IO の org.apache.commons.io.filefilter (Com

記事を読む

commons-io

commons-io に見るファイル操作処理のヒント(FileUtils編その1)

今回も commons-io の JavaDoc とソースコードを眺めて発見した便利なメソッドや実装

記事を読む

commons-io

commons-io に見るファイル操作処理のヒント(IOUtils編)

今回も commons-io の JavaDoc とソースコードを眺めて発見した便利なメソッドや実装

記事を読む

no image

AgeFileFilter を使ったフィルタ処理のサンプル

Commons IO の org.apache.commons.io.filefilter (Com

記事を読む

icatch-lineiterator_mini

Commons IO の LineIterator#isValidLine メソッドをオーバーライドしたサンプル

CommonsIO にテキストファイルの読み込み処理で役立ちそうなクラスがあったので検証してみました

記事を読む

commons-io

拡張子を指定したフィルタの実装サンプル

Commons-io の FileFilter のサンプルをいくつか書いてみたのでメモしておきます。

記事を読む

icatch-teacher_3509507274_mini-thumbnail

commons-io に見るファイル操作処理のヒント(FilenameUtils編)

commons-io の JavaDoc とソースコードを眺めて発見した便利なメソッドや実装のヒント

記事を読む

commons-io

commons-io に見るファイル操作処理のヒント(FileBasedTestCase編)

次のプロジェクトはファイルを頻繁に扱うので、楽を出来ないかと Commons IO の JavaDo

記事を読む

Googleアドセンス用(PC)

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


+ 四 = 6

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Googleアドセンス用(PC)

icatch-jersey_multi_pathparams
Jerseyの@PathParamはスラッシュの間に複数指定できる

http://hoge-api/user/{id}.{format}

icatch-vagrant_box_customize
VagrantのBoxファイルをカスタマイズして独自のBoxファイルを作成する

配布されている Vagrant の Box ファイルを使って検証環境を

icatch-2015-006-1
バリデーションチェックにJava8のOptionalを使ってスマートに書く(自分比)

Web アプリのバリデーションチェックにアノテーションを使うことが増え

icatch-2015-005-1
ユニットテストの偏りを防ぐ命名規則の付け方

ユニットテスト名に以下の命名規則を付けるようにして二ヶ月ぐらい経った。

icatch-2015-004-1
Vagrantで起動したCentOS上のOctopressをホストOSから確認する設定

タイトルの通りだが、Vagrant を使って起動した CentOS に

→もっと見る

PAGE TOP ↑