android - 以编程方式获取从图库中选择的图像的大小(以 kb 或 mb 为单位)

标签 android file uri android-gallery filesize

我正在从图库中选择一张图片。我想以编程方式确定图片的大小(以 kb 或 mb 为单位)。 这是我写的:

public String calculateFileSize(Uri filepath)
{
    //String filepathstr=filepath.toString();
    File file = new File(filepath.getPath());

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

    String calString=Long.toString(fileSizeInMB);
    return calString;
}

从图库中选择时图像的 uri 非常完美。但是 fileSizeInBytes 的值为零。我在选择图像后在 onActivityResult 上调用此方法来自画廊。我之前在这里看到了几个相同的问题。但没有一个对我有用。有什么解决办法吗?

最佳答案

改变

public String calculateFileSize(Uri filepath)
{
  //String filepathstr=filepath.toString();
  File file = new File(filepath.getPath());

  long fileSizeInKB = fileSizeInBytes / 1024;
  // Convert the KB to MegaBytes (1 MB = 1024 KBytes)
  long fileSizeInMB = fileSizeInKB / 1024;

  String calString=Long.toString(fileSizeInMB);

public String calculateFileSize(String filepath)
{
  //String filepathstr=filepath.toString();
  File file = new File(filepath);

  float fileSizeInKB = fileSizeInBytes / 1024;
  // Convert the KB to MegaBytes (1 MB = 1024 KBytes)
  float fileSizeInMB = fileSizeInKB / 1024;

  String calString=Float.toString(fileSizeInMB);

当您使用 long 时,它会截断 之后的所有数字。 因此,如果您的大小小于 1MB,您将得到 0。

所以使用 float 代替 long

关于android - 以编程方式获取从图库中选择的图像的大小(以 kb 或 mb 为单位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24864257/

相关文章:

c++ - 使用 C++ 读取大文件的 SSD

Android:如何使用UriMatcher实现多表、查询参数、Activity的切换?

android - Play 商店 Beta 测试返回 404

android - 如何在 Chrome(Android、iOS)中删除 input[type=date] 中的左缩进

java - 通知依赖项解析监听器失败

android - 由于 Fragment 和 Activity 层次结构而导致的菜单排序差异。 (onCreateOptionsMenu)

java - Java listFiles().length 只返回文件数还是文件+文件夹数

linux - 使用正则表达式修改文本文件

php - 使用基于浏览器的 YouTube API 客户端身份验证时,oauth2 的重定向 URI 片段中有额外的字段

java - URI权限被撤销后如何重新请求?