[ Java ] ファイルサイズ(File.length)はlong型です。int型ではありません。

Pocket

Java では、ファイルサイズを long型で扱いますが、時々、折角の long を int 型にしてしまうことがあります。うっかりであれば、まだ救いようがありますが、「 ファイルサイズは int 型ナリ 」 のような意識(無意識問わず)の人もいますので、気をつけたいものです。

スポンサーリンク

ファイルサイズを Byte から KByte に変換してみる

次のサンプルコードのように、いつの間にかlongからintに切り詰められていることのないようにしましょう。詳細はサンプル内のコメントも参照ください。

File f = new File("/path/to/file.txt");

// 1024バイトで1キロバイトとする
// 1000バイトとしても良い。設計次第です。あなた次第です。
BigDecimal kb = BigDecimal.valueOf(1024);

// ファイルサイズを取得する(long → BigDecimal)
BigDecimal fileSize = BigDecimal.valueOf(file.length());

// ファイル長はlongです。intではありません。注意しましょう
//int intFileSize = fileSize.divide(kb, 0, BigDecimal.ROUND_HALF_UP).intValue();

// File.length は long型です
// ファイルサイズをバイトからキロバイトに単位変換する(小数第1位を四捨五入)
long longFileSize = fileSize.divide(kb, 0, BigDecimal.ROUND_HALF_UP).longValue();

妥協は次の妥協の母

サンプルのようなコードでは、4GByte を超えるような大きなファイルを扱わないと分かっていれば、おそらくは問題は起きないでしょう。しかし、妥協は次なる妥協をうみだします。許容しているうちに自分の感覚がマヒしていないか時々、振り返ってみると良いかもしれません。

ただし、あくまでも程度の問題です。意味ないエラーチェックを強要するダメなプロジェクトは山程あります。SEなる人の「何となく心配」が動機になってることが多いです。また、このようなSEは素養が低い傾向にあります(管理人の独自調査による)。

スポンサーリンク


Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>