Java读取文件夹大小的6种方法与代码示例

2024-12-31 17:35:58   小编

Java读取文件夹大小的6种方法与代码示例

在Java编程中,有时我们需要获取文件夹的大小,以便进行磁盘空间管理或其他相关操作。下面将介绍6种常见的方法,并提供相应的代码示例。

方法一:递归遍历计算

这是最基本的方法,通过递归遍历文件夹下的所有文件和子文件夹,累加文件大小。

public static long getFolderSize1(File folder) {
    long size = 0;
    if (folder.isFile()) {
        return folder.length();
    } else {
        File[] files = folder.listFiles();
        if (files!= null) {
            for (File file : files) {
                size += getFolderSize1(file);
            }
        }
    }
    return size;
}

方法二:使用Files.walk

Java 8引入的Files.walk方法可以方便地遍历文件树。

public static long getFolderSize2(Path path) throws IOException {
    return Files.walk(path)
              .filter(Files::isRegularFile)
              .mapToLong(p -> {
                   try {
                       return Files.size(p);
                   } catch (IOException e) {
                       return 0;
                   }
               })
              .sum();
}

方法三:使用Apache Commons IO库

Apache Commons IO提供了FileUtils.sizeOfDirectory方法。

import org.apache.commons.io.FileUtils;

public static long getFolderSize3(File folder) {
    return FileUtils.sizeOfDirectory(folder);
}

方法四:使用Java 7的NIO.2

通过DirectoryStream遍历文件夹。

public static long getFolderSize4(Path path) throws IOException {
    long size = 0;
    try (DirectoryStream<Path> stream = Files.newDirectoryStream(path)) {
        for (Path entry : stream) {
            if (Files.isDirectory(entry)) {
                size += getFolderSize4(entry);
            } else {
                size += Files.size(entry);
            }
        }
    }
    return size;
}

方法五:使用Google Guava库

Guava库的Files.fileTreeTraverser可用于遍历文件树。

import com.google.common.collect.Files;

public static long getFolderSize5(File folder) {
    return Files.fileTreeTraverser().postOrderTraversal(folder)
              .stream()
              .filter(File::isFile)
              .mapToLong(File::length)
              .sum();
}

方法六:使用Java的ProcessBuilder执行命令

在某些系统上,可以通过执行系统命令获取文件夹大小。

public static long getFolderSize6(String folderPath) throws IOException {
    ProcessBuilder pb = new ProcessBuilder("du", "-s", folderPath);
    Process process = pb.start();
    // 读取命令输出并解析大小
    // 此处省略部分代码
    return size;
}

以上就是Java读取文件夹大小的6种方法,可根据实际需求选择合适的方式。

TAGS: 代码示例 方法汇总 Java 文件夹大小读取

欢迎使用万千站长工具!

Welcome to www.zzTool.com