Bagaimana cara mengubah ukuran byte menjadi format yang dapat dibaca manusia di Jawa? Seperti 1024 harus menjadi "1 Kb" dan 1024 * 1024 harus menjadi "1 Mb".
Saya agak bosan menulis metode utilitas ini untuk setiap proyek. Apakah ada metode statis di Apache Commons untuk ini?
java
formatting
apache-commons
Igor Mukhin
sumber
sumber
Jawaban:
Sumber: Memformat ukuran byte ke format yang dapat dibaca manusia | Pemrograman. Panduan
SI (1 k = 1.000)
Biner (1 K = 1.024)
Contoh output:
sumber
du
perintah misalnya di Linux.)FileUtils.byteCountToDisplaySize(long size)
akan bekerja jika proyek Anda dapat diandalkanorg.apache.commons.io
.JavaDoc untuk metode ini
sumber
Gunakan Android builtin Class
Untuk Android ada Formatter kelas . Hanya satu baris kode dan Anda selesai.
Itu seperti
formatFileSize()
, tetapi mencoba untuk menghasilkan angka yang lebih pendek (menunjukkan lebih sedikit desimal).Memformat ukuran konten dalam bentuk byte, kilobyte, megabita, dll.
sumber
Context
.Kita dapat sepenuhnya menghindari penggunaan metode
Math.pow()
dan lambatMath.log()
tanpa mengorbankan kesederhanaan karena faktor antara unit (misalnya B, KB, MB dll.) Adalah 1024 yaitu 2 ^ 10. TheLong
kelas memiliki bergunanumberOfLeadingZeros()
metode yang dapat kita gunakan untuk membedakan mana unit nilai ukuran jatuh.Poin kunci: Ukuran unit memiliki jarak 10 bit (1024 = 2 ^ 10) yang berarti posisi 1 bit tertinggi - atau dengan kata lain jumlah nol di depan - berbeda dengan 10 (Bytes = KB * 1024, KB = MB * 1024 dll.).
Korelasi antara jumlah nol terdepan dan satuan ukuran:
Kode terakhir:
sumber
Saya menanyakan pertanyaan yang sama baru-baru ini:
Memformat ukuran file sebagai MB, GB, dll
Meskipun tidak ada jawaban di luar kotak, saya dapat hidup dengan solusinya:
Kode uji:
Output (pada Bahasa Jerman saya):
Sunting: Saya telah membuka Masalah yang meminta fungsi ini untuk Google Guava . Mungkin seseorang akan peduli untuk mendukungnya.
sumber
Ini adalah versi modifikasi dari jawaban aioobe .
Perubahan:
Locale
parameter, karena beberapa bahasa menggunakan.
dan lainnya,
sebagai titik desimal.sumber
Jika Anda menggunakan Android, Anda cukup menggunakan android.text.format.Formatter.formatFileSize () .
Alternatifnya, berikut ini solusi berdasarkan pos populer ini :
Atau di Kotlin:
sumber
unitsCount
dan tidakunitsCount-1
.if(result<unit) break;
akan menendang sebelum itu. Jangan khawatir. (Jika Anda mengujinya, Anda akan melihat bahwa Anda dapat melewati kondisi for-loop sepenuhnya.)sumber
sumber
Byte Units memungkinkan Anda melakukannya seperti ini:
Saya telah menulis perpustakaan lain yang disebut unit penyimpanan yang memungkinkan Anda melakukannya seperti ini:
Jika Anda ingin memaksa unit tertentu, lakukan ini:
sumber
sumber
Sekarang ada satu perpustakaan yang tersedia yang berisi pemformatan unit. Saya menambahkannya ke perpustakaan triava , karena satu-satunya perpustakaan lain yang ada tampaknya menjadi satu untuk Android.
Ini dapat memformat angka dengan presisi sewenang-wenang, dalam 3 sistem yang berbeda (SI, IEC, JEDEC) dan berbagai opsi keluaran. Berikut adalah beberapa contoh kode dari pengujian unit triava :
Mencetak tepat kilo, nilai mega (di sini dengan W = Watt):
Anda dapat melewati DecimalFormat untuk menyesuaikan output:
Untuk operasi sewenang-wenang pada nilai kilo atau mega, Anda dapat membaginya menjadi komponen:
sumber
Saya tahu sudah terlambat untuk memperbarui posting ini! tapi saya bersenang-senang dengan ini:
Buat antarmuka:
Buat kelas StorageUnits:
Sebut saja:
Keluaran:
sumber
Kalau-kalau itu menghemat waktu, atau mungkin hanya untuk bersenang-senang, inilah versi Go. Untuk mempermudah, saya hanya menyertakan case output biner.
sumber
Cukup tambahkan lebih banyak unit file (jika ada yang hilang), dan Anda akan melihat ukuran unit hingga unit itu (jika file Anda memiliki panjang sebanyak itu) System.out.println ("Ukuran file dalam format yang tepat:" + bytes + "" + fileSizeUnits [indeks]); sizeToReturn = String.valueOf (bytes) + "" + fileSizeUnits [index]; mengembalikan sizeToReturn; }
sumber
Ini setara dengan C # .net untuk jawaban konsensus yang benar di atas Java. (ada lagi di bawah ini yang memiliki kode lebih pendek)
Secara teknis, jika kita tetap pada unit SI, rutin ini berfungsi untuk setiap penggunaan angka secara teratur. Ada banyak jawaban bagus lainnya dari para ahli. Misalkan Anda melakukan penyatuan data angka pada tampilan kisi, nilainya untuk memeriksa kinerja yang dioptimalkan dari mereka.
PS: Diposting karena pertanyaan / jawaban ini muncul paling atas di pencarian google saat saya sedang melakukan proyek C #.
sumber
Anda dapat menggunakan StringUtils s’
TraditionalBinarPrefix
:sumber
agak tua tapi, ... org.springframework.util.unit.DataSize bisa cocok dengan persyaratan ini setidaknya untuk perhitungan, maka dekorator sederhana akan melakukan
sumber
sumber
Sudahkah Anda mencoba JSR 363 ? Modul ekstensi unitnya seperti Unicode CLDR (di GitHub: uom-systems ) melakukan semua itu untuk Anda.
Anda dapat menggunakan
MetricPrefix
termasuk dalam setiap implementasi atauBinaryPrefix
(sebanding dengan beberapa contoh di atas) dan jika Anda misalnya tinggal dan bekerja di India atau negara terdekat,IndianPrefix
(juga dalam modul umum sistem-uom) memungkinkan Anda untuk menggunakan dan memformat "Crore Bytes "atau" Lakh Bytes "juga.sumber
Mungkin Anda bisa menggunakan kode ini (dalam C #):
sumber
sumber
Gunakan fungsi berikut untuk mendapatkan informasi yang tepat, Dihasilkan dengan mengambil basis
ATM_CashWithdrawl
konsep.Saya baru saja memodifikasi kode facebookarchive-
StringUtils
untuk mendapatkan format di bawah ini. Format yang sama Anda akan dapatkan ketika Anda menggunakan apache.hadoop-StringUtils
Contoh penggunaan metode di atas:
Bytes untuk mendapatkan format di atas
Untuk menampilkan waktu dalam format yang dapat dibaca manusia gunakan fungsi ini
millisToShortDHMS(long duration)
.sumber
di sini adalah konversi dari @aioobe dikonversi ke kotlin
sumber