获取文件的大小 KB、MB、GB、BT

在做清理文件的时候发现,文件大小 和 文件的 占用空间 是不一样的(可以查看电脑上详细看到),通过 length()方法得到的是文件占用空间,下面提供文件大小的获取方式。单位是B。

FileInputStream fis = null;
String fileSize = "";
try {
    fis = new FileInputStream(f);
    fileSize = String.valueOf(fis.available());
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

但是看 available() 方法的返回值发现是int类型的

public int available() throws IOException {
        // Android-added: close() check before I/O.
        if (closed) {
            throw new IOException("Stream Closed");
        }
        return available0();
}

也就是说能计算到最大文件大小是2147483647B = 1.99GB

public static String getFileSize(long size){
    double cache = size / 1024f;
    String unit = "K";
    if (cache >= 1024f) {
        cache /= 1024f;
        unit = "M";
    }
    if (cache >= 1024f) {
        cache /= 1024f;
        unit = "G";
    }
    if (cache >= 1024f) {
        cache /= 1024f;
        unit = "T";
    }
    return new DecimalFormat("0.00").format(cache) + unit;
}

也就是说能计算到最大文件大小是2147483647B = 1.99GB

其实FileInputStream中还有一个方式获取 long 型的文件大小,fis.getChannel().size(),这种方式获取到的仍然是B为单位,换算后能计算8388607T大小的文件