如何在Android中获取临时文件的文件大小?

lyr7nygr  于 2023-03-27  发布在  Android
关注(0)|答案(6)|浏览(197)

如果我使用openFileOutput()来创建并写入临时文件,那么在完成写入后,我如何获得文件大小?

iyr7buue

iyr7buue1#

我希望这能帮助你:

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

其中字符串selectedPath是要确定其文件大小的文件的路径。
file.length()以字节为单位返回文件的长度,如Java 7文档中所述:
返回此抽象路径名所表示的文件的长度(以字节为单位),如果文件不存在,则返回0L。某些操作系统可能会为表示依赖于系统的实体(如设备或管道)的路径名返回0L。
除以1024将大小从字节转换为kibibytes。kibibytes = 1024字节。

ih99xse1

ih99xse12#

Kotlin扩展解决方案

将它们添加到某处,然后调用myFile.sizeInMb或任何您需要的函数

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

如果需要String或Uri中的文件,请尝试添加以下内容

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

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

如果你想轻松地将值显示为字符串,这些都是简单的 Package 器。

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"
bcs8qyzn

bcs8qyzn3#

尝试使用下面的代码:

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

希望它能为你工作!!

sdnqo3pr

sdnqo3pr4#

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;
}

你也可以使用这个函数,我用这个函数来检查文件大小是否小于2MB,当你使用file.lenght函数时,它返回文件大小的字节数,所以我用字节数来检查文件大小。

sbtkgmzw

sbtkgmzw5#

以上所有代码都有一个小问题,因为file.length()没有返回文件的确切大小。为了解决这个问题,我尝试了多种方法,过了一段时间我得到了修复。下面的代码可以让你得到文件的确切大小

注意,对于字节到KB的转换,我除以了1000.0而不是1024.0。这对我来说很有效。

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;
}
mkh04yzy

mkh04yzy6#

对于Kotlin开发人员,只需使用这行

floor(file.length() / 1000.0 + 0.5).toInt()
  • 0.5有助于将其四舍五入到最接近的整数。
    为了便于讨论,假设我们要将9.2四舍五入到最接近的整数。我们可以将它加上0.5,这将给予9.7。当我们对它使用math.floor时,它将向下舍入,我们将得到9。现在,假设我们要将9.9四舍五入到最接近的整数,我们将向它加上0.5,这将得到10.4,当我们对它使用math.floor时,它将返回10

相关问题