Wie erhalte ich die Dateigröße der temporären Datei in Android?

74

Wenn ich openFileOutput () zum Erstellen und Schreiben einer temporären Datei verwende, wie erhalte ich die Dateigröße, nachdem ich mit dem Schreiben fertig bin?

alexl
quelle
Versuchen Sie
Folgendes

Antworten:

190

Ich hoffe das kann dir helfen:

    File file = new File(selectedPath);
    int file_size = Integer.parseInt(String.valueOf(file.length()/1024));

Dabei ist der String selectedPathder Pfad zu der Datei, deren Dateigröße Sie bestimmen möchten.

file.length()Gibt die Länge der Datei in Bytes zurück, wie in der Java 7-Dokumentation beschrieben :

Gibt die Länge der durch diesen abstrakten Pfadnamen angegebenen Datei in Byte oder 0L zurück, wenn die Datei nicht vorhanden ist. Einige Betriebssysteme geben möglicherweise 0L für Pfadnamen zurück, die systemabhängige Entitäten wie Geräte oder Pipes bezeichnen.

Durch Teilen durch 1024 wird die Größe von Bytes in Kibibyte konvertiert. Kibibyte = 1024 Bytes.

Akash Singh
quelle
19
Nur ein Tipp: Um die Dateigröße auf Android gut lesbar anzuzeigen, können Sie verwendenFormatter.formatShortFileSize(context,file.length())
Android-Entwickler
3
Warum serialisieren und deserialisieren Sie die Kilobyte-Größe zu und von einem String?
Tobiq
11

Kotlin-Erweiterungslösung

Fügen Sie diese irgendwo hinzu und rufen myFile.sizeInMbSie dann an oder je nachdem, was Sie brauchen

val File.size get() = if (!exists()) 0.0 else length().toDouble()
val File.sizeInKb get() = size / 1024
val File.sizeInMb get() = sizeInKb / 1024
val File.sizeInGb get() = sizeInMb / 1024
val File.sizeInTb get() = sizeInGb / 1024

Wenn Sie eine Datei aus einem String oder Uri benötigen, fügen Sie diese hinzu

fun Uri.asFile(): File = File(toString())

fun String?.asUri(): Uri? {
    try {
        return Uri.parse(this)
    } catch (e: Exception) {
    }
    return null
}

Wenn Sie die Werte einfach als Zeichenfolge anzeigen möchten, sind dies einfache Wrapper. Sie können die angezeigten Standard-Dezimalstellen jederzeit anpassen

fun File.sizeStr(): String = size.toString()
fun File.sizeStrInKb(decimals: Int = 0): String = "%.${decimals}f".format(sizeInKb)
fun File.sizeStrInMb(decimals: Int = 0): String = "%.${decimals}f".format(sizeInMb)
fun File.sizeStrInGb(decimals: Int = 0): String = "%.${decimals}f".format(sizeInGb)

fun File.sizeStrWithBytes(): String = sizeStr() + "b"
fun File.sizeStrWithKb(decimals: Int = 0): String = sizeStrInKb(decimals) + "Kb"
fun File.sizeStrWithMb(decimals: Int = 0): String = sizeStrInMb(decimals) + "Mb"
fun File.sizeStrWithGb(decimals: Int = 0): String = sizeStrInGb(decimals) + "Gb"
Gibolt
quelle
5

Versuchen Sie, den folgenden Code zu verwenden:

// Get file from file name
    final String dirPath = f.getAbsolutePath();
    String fileName = url.substring(url.lastIndexOf('/') + 1);
    File file = new File(dirPath + "/" + fileName);

      // Get length of file in bytes
          long fileSizeInBytes = file.length();
     // Convert the bytes to Kilobytes (1 KB = 1024 Bytes)
          long fileSizeInKB = fileSizeInBytes / 1024;
    //  Convert the KB to MegaBytes (1 MB = 1024 KBytes)
          long fileSizeInMB = fileSizeInKB / 1024;

          if (fileSizeInMB > 27) {
          ...
          }

Hoffe es wird für dich funktionieren .. !!

Devangi
quelle