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 ?
Réponses
Trop de publicités?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"
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.. ! !
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.
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;
}