92 votes

comment puis-je obtenir la taille du fichier temporaire dans Android ?

si j'utilise openFileOutput () pour créer et écrire dans un fichier temporaire, comment puis-je obtenir la taille de fichier une fois que j'ai fini d'écrire dessus ?

31voto

Gibolt Points 4072

Solution d'extension Kotlin

Ajoutez-les quelque part, puis appelez myFile.sizeInMb ou n'importe lequel de vos besoins

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

Si vous avez besoin d'un fichier à partir d'une chaîne ou d'un URI, essayez d'ajouter ces éléments

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

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

Si vous souhaitez afficher facilement les valeurs sous forme de chaîne, il s'agit de simples wrappers. N'hésitez pas à personnaliser les décimales par défaut affichées

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"

9voto

Devangi Points 94

Essayez d'utiliser le code ci-dessous :

// 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) {
          ...
          }

J'espère que ça marchera pour vous.. ! !

3voto

Apoorv Pandey Points 199
private boolean isFileLessThan2MB(File file) {
    int maxFileSize = 2 * 1024 * 1024;
    Long l = file.length();
    String fileSize = l.toString();
    int finalFileSize = Integer.parseInt(fileSize);
    return finalFileSize >= maxFileSize;
}

Vous pouvez également utiliser cette fonction.Je l'utilise pour vérifier si la taille du fichier est inférieure à 2 Mo lorsque vous utilisez la fonction file.lenght, elle renvoie la taille du fichier en octets. Donc j'ai vérifié la taille du fichier en octets.

1voto

Sreyans Bohara Points 11

Tous les codes ci-dessus ont un léger problème car le fichier.length() ne renvoie pas la taille exacte du fichier. Pour résoudre ce problème, j'ai essayé plusieurs façons, et après un certain temps, j'ai obtenu la solution. Ci-dessous est le code par lequel vous pouvez obtenir la taille exacte du fichier.

Notez que pour la conversion des octets en Ko, j'ai divisé par 1000.0 au lieu de 1024.0. Ça marche pour moi.

public static String getFolderSizeLabel(File file) {
    double size = (double) getFolderSize(file) / 1000.0; // Get size and convert bytes into KB.
    if (size >= 1024) {
        return (size / 1024) + " MB";
    } else {
        return size + " KB";
    }
}
public static long getFolderSize(File file) {
    long size = 0;
    if (file.isDirectory()) {
        for (File child : file.listFiles()) {
            size += getFolderSize(child);
        }
    } else {
        size = file.length();
    }
    return size;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X