您的位置:

Java获取文件大小

一、使用File.length()方法获取文件大小

Java中可以使用File类的length()方法获取指定文件的大小。该方法返回文件的字节数,以long类型表示。代码示例如下:

File file = new File("example.txt");
long fileSize = file.length();
System.out.println("文件大小为:" + fileSize + "字节");

需要注意的是,这种方法仅适用于获取文件大小。如果需要获取文件夹的大小,就需要使用其他方法。

二、通过Apache Commons IO库获取文件大小

Apache Commons IO是一套抽象I/O操作的类库,其中提供了获取文件大小的方法。具体使用步骤如下:

  1. 在项目中引入commons-io依赖
  2. 使用FileUtils.size()方法获取文件大小,单位为字节;同时提供了FileUtils.byteCountToDisplaySize()方法将字节数转换为人类可读的大小表示。

代码示例如下:

File file = new File("example.txt");
long fileSize = FileUtils.sizeOf(file);
String humanReadableSize = FileUtils.byteCountToDisplaySize(fileSize);
System.out.println("文件大小为:" + humanReadableSize);

需要注意的是,这种方法需要引入额外的依赖库。同时,该库还提供了其他便捷的I/O操作方法。

三、递归计算文件夹大小

如果需要获取文件夹的大小,可以通过递归计算每个文件的大小并相加来实现。具体步骤如下:

  1. 编写递归方法,对文件夹中的每一个文件进行遍历
  2. 使用File.length()方法获取文件大小
  3. 使用递归方法对子文件夹进行遍历,并将文件大小相加

代码示例如下:

public static long getFolderSize(File folder) {
    long size = 0;
    for (File file : folder.listFiles()) {
        if (file.isFile()) {
            size += file.length();
        } else {
            size += getFolderSize(file);
        }
    }
    return size;
}

File folder = new File("example_folder");
long folderSize = getFolderSize(folder);
System.out.println("文件夹大小为:" + FileUtils.byteCountToDisplaySize(folderSize));

需要注意的是,递归计算文件夹大小可能会花费一定的时间,对于较大的文件夹需要进行优化。

四、使用Java 8的Stream API计算文件夹大小

Java 8引入了新的Stream API,可以极大地简化数据处理操作。在计算文件夹大小时,也可以使用Stream API来处理。具体步骤如下:

  1. 使用Files.walk()方法遍历文件夹中的所有文件,获取文件流
  2. 使用map()方法将文件流转换为文件大小流
  3. 使用reduce()方法将文件大小流相加,得到文件夹大小

代码示例如下:

Path folderPath = Paths.get("example_folder");
long folderSize = Files.walk(folderPath)
                     .filter(p -> p.toFile().isFile())
                     .mapToLong(p -> p.toFile().length())
                     .reduce(0, Long::sum);
System.out.println("文件夹大小为:" + FileUtils.byteCountToDisplaySize(folderSize));

需要注意的是,使用Stream API的代码确实简洁,但是在处理大文件夹时可能会产生性能问题。