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は素養が低い傾向にあります(管理人の独自調査による)。