Wie konvertiert byte-Größe in menschenlesbarem format in java?
Wie konvertiert byte-Größe in Menschen-lesbaren format in Java? Wie 1024 sollte sich "1 Kb" und 1024*1024 sollte sich "1 Mb".
Bin ich irgendwie krank zu schreiben, dieses Dienstprogramm-Methode für jedes Projekt. Gibt es statische Methoden in Apache Commons?
Wenn Sie die standardisierten Einheiten, 1024 sollte sich "1KiB" und 1024*1024 sollte sich "1MiB". en.wikipedia.org/wiki/Binary_prefix
Es sollte mehrere Funktionen oder eine option angeben, die Basis und die Einheit.
mögliche Duplikate von "Format" - Datei Größe MB, GB etc
Cuoq: Danke für die Referenz. Ich wusste nicht, bis ich es gelesen habe, dass hier wir in der EU sind erforderlich, um die richtigen Präfixe durch das Gesetz.
Sie erwähnt, dass "Bis eine solche Bibliothek existiert". Dies ist nun wahr geworden. 🙂 stackoverflow.com/questions/3758606/...
Es sollte mehrere Funktionen oder eine option angeben, die Basis und die Einheit.
mögliche Duplikate von "Format" - Datei Größe MB, GB etc
Cuoq: Danke für die Referenz. Ich wusste nicht, bis ich es gelesen habe, dass hier wir in der EU sind erforderlich, um die richtigen Präfixe durch das Gesetz.
Sie erwähnt, dass "Bis eine solche Bibliothek existiert". Dies ist nun wahr geworden. 🙂 stackoverflow.com/questions/3758606/...
InformationsquelleAutor Igor Mukhin | 2010-09-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist mein es gehen (keine Schlaufen und Griffe sowohl SI-Einheiten und binäre Einheiten):
Beispiel-Ausgabe:
Verwandte Artikel: Java: Formatierung byte-Größe, um für Menschen lesbaren format
du
- Befehl in Linux.)Ich denke, jeder sollte beachten Sie, dass in Ihrem Projekt Kunden wollen, sehen Sie Werte in der Basis 2 (geteilt durch 1024), aber mit gemeinsamem Präfix. Nicht KiB, MiB, GiB usw. Verwenden Sie KB, MB, GB, TB.
Für iOS-Entwickler, die Sie verwenden können, NSByteCountFormatter. Für Beispiel (swift):
let bytes = 110592 NSByteCountFormatter.stringFromByteCount(Int64(bytes), countStyle: NSByteCountFormatterCountStyle.File)
produzieren würde "111 KB"Mit "KB" zu bedeuten "1024 bytes" ist falsch. Tun Sie das nicht.
Die Leser erfahren es. Besser etwas, das Sie nicht vertraut sind mit und können lernen, es als etwas falsch. Schreiben KB ein Benutzer, der mit ihm vertraut ist, erwarten 1000 und Benutzer, die nicht vertraut ist, wird erwarten, dass 1024.
InformationsquelleAutor aioobe
FileUtils.byteCountToDisplaySize(long size)
funktionieren würde, wenn Ihr Projekt kann davon abhängenorg.apache.commons.io
.JavaDoc für diese Methode
stackoverflow.com/a/26502430/185022 ohne Abhängigkeit Android-Native
gibt es ein utility zu tun, den umgekehrten Vorgang. Immer byte-Anzahl von Menschen lesbare byte-count?
Leider ist diese Funktion nicht locale-aware; in Französisch, zum Beispiel, Sie immer anrufen bytes "Bytes" also, wenn Sie gehen, um die Anzeige einer 100 KB-Datei an einen französischen Benutzer die richtige Bezeichnung wäre 100 Ko.
diese Runden auf die nächste gb, wenn > 1 gb, was bedeutet, dass die Präzision, die Sie erhalten, variiert
InformationsquelleAutor user601806
Android-builtin-Klasse
Für Android gibt es eine Klasse Formatter. Nur eine wie von code und du bist fertig.
Es ist Wie
formatFileSize()
, sondern versuchen zu generieren kürzere Nummern (mit weniger Dezimalstellen).Formate, die ein Inhalt-Größe in form von bytes, kilobytes, megabytes, etc.
Ich hasse die Tatsache, die Sie zu Durchlaufen haben, in
Context
.Sollten die beste Antwort für ANDROID definitiv.
Sie übergeben im Rahmen, so dass es übersetzt auf der aktuellen Locale. Sonst wäre es ja nicht eine sehr nützliche Funktion.
Ich war mit der akzeptierten Antwort, bevor ich das wissen. Nur angemerkt werden, Bauen.VERSION_CODES.N und früher, die Befugnisse von 1024 verwendet werden, statt mit KB = 1024 Byte, MB = 1.048.576 bytes, etc. Als der O, die-Präfixe verwendet werden, die in Ihrer standard-Bedeutungen im SI-system, so dass kB = 1000 Byte, MB = 1.000.000 Byte, etc.
InformationsquelleAutor AZ_
Können wir komplett vermeiden Sie die Verwendung der langsamen
Math.pow()
undMath.log()
Methoden ohne Einbußen bei der Einfachheit, da der Faktor zwischen den Einheiten (z.B. B, KB, MB, etc.) ist 1024 also 2^10. DieLong
Klasse hat eine handlichenumberOfLeadingZeros()
Methode, die wir verwenden können, um zu sagen, welche Einheit der Wert "Größe" fällt.Entscheidende Punkt: Größe Einheiten haben einen Abstand von 10 bit (1024=2^10) was bedeutet die position des höchsten 1-bit - oder in anderen Worten die Anzahl der führenden Nullen - unterscheiden sich durch 10 (Bytes=KB*1024 KB=MB*1024 etc).
Korrelation zwischen der Anzahl der führenden Nullen und Größe Einheit:
Der endgültige code:
InformationsquelleAutor icza
Fragte ich die gleiche Frage vor kurzem:
Format Dateigröße MB, GB usw
Zwar gibt es keine out-of-the-box zu beantworten, ich kann mit der Lösung Leben:
Test-code:
Ausgabe (auf meiner deutschen Locale):
Edit: ich öffnete ein Problem anfordern diese Funktion für Google Guava. Vielleicht würde sich jemand kümmern, Sie zu unterstützen.
es war in meinem Anwendungsfall (anzeigen der Größe einer hochgeladenen Datei), aber wohl nicht universal
Wenn Sie ändern Sie die Letzte Zeile auf return NumberFormat.getFormat("#,##0.#").format(Ergebnis) + "" + Einheit; es funktioniert in GWT auch! Vielen Dank für diese, es ist immer noch nicht in Guave.
InformationsquelleAutor Sean Patrick Floyd
Dies ist eine modifizierte version von aioobe Antwort.
Änderungen:
Locale
parameter, da einige Sprachen verwenden.
und andere,
als Dezimaltrennzeichen.InformationsquelleAutor Christian Strempfer
Wenn Sie mit Android, können Sie einfach Formatter.formatFileSize() .
Alternativey, hier ist eine Lösung basierend aufdieses beliebte post :
unitsCount
und nichtunitsCount-1
.aber dies bedeutet, dass die Schleife stoppen kann, wenn ich==unitsCount, was bedeutet, dass i==6, was bedeutet, "charAt" fehl...
if(result<unit) break;
wird in vor dem Anpfiff. Keine Sorge. (Wenn Sie es testen, werden Sie feststellen, dass Sie überspringen die for-Schleife Bedingung vollständig.)Richtig ist, das ist wegen der Annahme (die richtig ist), dass ich mit "long" Variablen-Typ. Auch, es basiert auf der Annahme, dass die Einheiten zumindest das, was ich geschrieben habe. Wenn man weniger Einheiten, die Sie produzieren seltsame Ergebnisse (lieber weniger-als-1-Werte, eher als, größer-als-1000-Werte).
Richtig, aber wie es jetzt steht, ist es ernst zu fehlerhaft.
InformationsquelleAutor android developer
InformationsquelleAutor Lars Bohl
InformationsquelleAutor XXX
InformationsquelleAutor Sujith Manjavana
Byte-Einheiten ermöglicht es Ihnen, es zu tun mögen dieses:
Ich geschrieben habe, eine weitere Bibliothek namens storage-Einheiten, die es Ihnen erlaubt, es zu tun mögen dieses:
In Fall, dass Sie wollen, zu zwingen, eine bestimmte Einheit, dies zu tun:
Yep danke! Bearbeitet mich, um ein Beispiel für byte-Einheiten
InformationsquelleAutor Sebastian Hoß
Gibt es jetzt eine Bibliothek zur Verfügung, enthält eine Einheit formatieren. Ich habe es auf die triava Bibliothek, als die einzige andere vorhandene Bibliothek zu sein scheint, eine für Android.
Kann formatieren von zahlen mit beliebiger Genauigkeit, in 3 verschiedenen Systemen (SI, IEC, JEDEC) und verschiedenen output-Optionen. Hier sind einige code-Beispiele aus dem triava unit-tests:
Drucken genauen kilo -, mega-Werte (hier mit W = Watt):
Können Sie ein DecimalFormat zum anpassen der Ausgabe:
Für beliebige Operationen auf kilo-oder mega-Werte, können Sie Sie trennen, in Komponenten:
InformationsquelleAutor Christian Esken
Ich weiß, es ist zu spät, diesen Beitrag zu aktualisieren! aber ich hatte einigen Spaß mit diesem:
Erstellen Sie eine Schnittstelle:
Erstellen StorageUnits Klasse:
Nennen es:
Ausgabe:
InformationsquelleAutor Ahmad AlMughrabi
Nur hinzufügen weitere Datei-Einheiten (falls vorhanden), und Sie werden sehen, unit-Größe bis zu, dass die Einheit (wenn Sie Ihre Datei hat, die viel Länge)
System.aus.println("Dateigröße im richtigen format:" + bytes + "" + fileSizeUnits[index]);
sizeToReturn = String.valueOf(bytes) + "" + fileSizeUnits[index];
zurück sizeToReturn;
}
InformationsquelleAutor Vishwajit R. Shinde
Hier ist das C# .net-äquivalent für Java-korrekten Konsens obige Antwort.
(es ist ein anderes unten, die kürzeren codes)
Technisch gesehen, wenn man sich auf SI-Einheiten, diese routine funktioniert für alle regulären Nutzung von Nummern. Es gibt viele andere gute Antworten von Experten. Angenommen, Sie tun databinding von zahlen auf gridviews, es lohnt sich, check-out performance-optimierten Routinen von Ihnen.
PS: Gebucht, da dieses Frage/Antwort kam oben auf der google-Suche, während ich Tue, das C# - Projekt.
InformationsquelleAutor Chan Fun Chiat
In der off-chance, es spart jemand ein bisschen Zeit haben, oder vielleicht nur für ein bisschen Spaß, hier ist ein Go-version. Für Einfachheit habe ich nur die binary-output-Fall.
InformationsquelleAutor Rick-777
InformationsquelleAutor Mano Chella
Haben Sie versucht,JSR 363? Seine Einheit Erweiterungsmodule wie Unicode CLDR (in GitHub: me-Systeme) tun alles für Sie.
Können Sie
MetricPrefix
enthalten, die in jeder Implementierung oderBinaryPrefix
(vergleichbar mit einigen der Beispiele oben), und wenn man z.B. Leben und arbeiten in Indien oder ein benachbartes Land,IndianPrefix
(auch in der gemeinsamen Modul me-Systeme) ermöglicht die Verwendung und das format "Crore Bytes" oder "Lakh Bytes".InformationsquelleAutor Werner Keil
Können Sie StringUtils's
TraditionalBinarPrefix
:InformationsquelleAutor Joe
Vielleicht können Sie diesen code verwenden(in C#):
InformationsquelleAutor Jacons Morais
InformationsquelleAutor Samkov Max
Verwenden Sie die folgende Funktion erhalten Sie genaue Informationen, Erzeugt durch die Einnahme der Basis von
ATM_CashWithdrawl
Konzept.Habe ich gerade geändert, der code von facebookarchive-
StringUtils
, um die unten-format. Dasselbe format, das Sie erhalten, wenn Sie verwenden apache.hadoop-StringUtils
Beispiel für die Verwendung der oben genannten Methoden:
Bytes zu erhalten über format
Um die Anzeige der Zeit in menschlichen lesbaren format verwenden Sie diese Funktion
millisToShortDHMS(lange Dauer)
.InformationsquelleAutor Yash