位置:首页 » 文章/教程分享 » java获取文件大小的方法

目前Java获取文件大小的方法有两种:

1、通过file的length()方法获取;

2、通过流式方法获取;

通过流式方法又有两种,分别是旧的java.io.*中FileInputStream的available()方法和新的java..nio.*中的FileChannel

下面依次介绍这几种方法:

首先选择一个文件并查看这个文件在windows中显示的大小,为了测试准确性,我这里选取了一个大文件(超过2GB)

查看这个文件在windows中显示的大小:

使用在线转换工具将其转换成字节:

可以看出这个文件的实际大小是3265574912Byte,下面通过代码来获取文件大小,并进行比较:

一、通过length方法:

/**
 * 获取文件长度
 * @param file
 */
public static void getFileSize1(File file) {
    if (file.exists() && file.isFile()) {
        String fileName = file.getName();
        System.out.println("文件"+fileName+"的大小是:"+file.length());
    }
}
查看结果:

可见,使用length方法获取的文件大小与windows中显示的大小一致!

二、通过file.io.*中的流式方法获取

 /**
 * 根据java.io.*的流获取文件大小
 * @param file
 */
public static void getFileSize2(File file){
    FileInputStream fis  = null;
    try {
        if(file.exists() && file.isFile()){
            String fileName = file.getName();
            fis = new FileInputStream(file);
            System.out.println("文件"+fileName+"的大小是:"+fis.available()+"\n");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }finally{
        if(null!=fis){
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

通过这种方法获取的文件大小是2147483647,很明显,这是int类型所能表示的最大值2^31-1,究其原因是因为文件的大小超过了int所能表示的最大值!!!