[解決済み] ファイルサイズをMB、GBなどでフォーマットする[重複]。
2022-06-29 14:52:43
質問
ファイルサイズを 文字列 として表示する必要があります。
例えば
1L ==> "1 B";
1024L ==> "1 KB";
2537253L ==> "2.3 MB"
など
私が見つけたのは この前の回答 を見つけましたが、私は満足できるものではありませんでした。
私は、同様の欠点を持つ私自身の解決策を思いつきました。
private static final long K = 1024;
private static final long M = K * K;
private static final long G = M * K;
private static final long T = G * K;
public static String convertToStringRepresentation(final long value){
final long[] dividers = new long[] { T, G, M, K, 1 };
final String[] units = new String[] { "TB", "GB", "MB", "KB", "B" };
if(value < 1)
throw new IllegalArgumentException("Invalid file size: " + value);
String result = null;
for(int i = 0; i < dividers.length; i++){
final long divider = dividers[i];
if(value >= divider){
result = format(value, divider, units[i]);
break;
}
}
return result;
}
private static String format(final long value,
final long divider,
final String unit){
final double result =
divider > 1 ? (double) value / (double) divider : (double) value;
return String.format("%.1f %s", Double.valueOf(result), unit);
}
主な問題は、私のDecimalformatと/またはString.formatに関する限られた知識です。私は1024L, 1025L, などを
1 KB
ではなく
1.0 KB
.
というわけで、2つの可能性があります。
- のような公共の図書館ですぐに使える良い解決策を希望します。 アパッチコモンズ または グーグル グアバ .
- ない場合、どうすれば '.0' の部分を取り除くことができますか (文字列置換や正規表現に頼ることなく、自分でできます)。
どのように解決するのですか?
public static String readableFileSize(long size) {
if(size <= 0) return "0";
final String[] units = new String[] { "B", "kB", "MB", "GB", "TB" };
int digitGroups = (int) (Math.log10(size)/Math.log10(1024));
return new DecimalFormat("#,##0.#").format(size/Math.pow(1024, digitGroups)) + " " + units[digitGroups];
}
これで1000TBまで使える...しかもプログラムは短い!
関連
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
Exception: java.util.NoSuchElementException: 行が見つかりません
-
[解決済み] どうすれば、文字列中のリテラルな中抜き文字を印刷し、また.formatを使用することができるのでしょうか?
-
[解決済み] ファイルの内容からJavaの文字列を作成するにはどうすればよいですか?
-
[解決済み] ファイルを作成し、書き込むにはどうすればよいですか?
-
[解決済み] テキストファイルを文字列変数に読み込んで、改行を除去するには?
-
[解決済み] .NETでフォーマット文字列のブレース(中括弧)をエスケープする方法
-
[解決済み] Javaでバイトサイズを人間が読める形式に変換するにはどうしたらいいですか?
-
[解決済み] 浮動小数点以下の0を削除して文字列に変換する方法
-
[解決済み] この日付形式は何ですか?2011-08-12T20:17:46.384Z
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スタイルが読み込まれず、ブラウザのコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
final, finally, finalizeの違いについて話してください。
-
Android Studio 3.1.2 で v4, v7 パッケージが見つからない シンボル 'AppCompatActivity' を解決できない
-
プロジェクトの依存関係を解決できなかった 解決
-
node js npm gruntインストール、elasticsearch-head 5.Xインストール
-
マスキング このリソースにアクセスするには、完全な認証が必要です。
-
SocketTimeoutExceptionです。読み込みがタイムアウトしました
-
HttpClientがGZIP形式でない場合の対処法
-
[解決済み] Javaでバイトサイズを人間が読める形式に変換するにはどうしたらいいですか?
-
[解決済み] フォルダやファイルのサイズを取得する