import java.io.File;
public class RecursiveFileSizeCalculator {
public static void main(String[] args) {
// 指定目录路径和文件类型
String directoryPath = "/path/to/your/directory";
String fileType = ".txt"; // 想要统计的文件类型,比如 .txt, .jpg 等
// 调用方法计算文件大小
long totalSize = calculateTotalFileSize(directoryPath, fileType);
// 打印结果
System.out.println("Total size of " + fileType + " files in directory " + directoryPath + " and its subdirectories is: " + totalSize + " bytes");
}
// 递归方法计算目录下及其子目录下指定类型文件的总大小
private static long calculateTotalFileSize(String directoryPath, String fileType) {
long totalSize = 0;
File directory = new File(directoryPath);
// 确保目录存在且是一个目录
if (directory.exists() && directory.isDirectory()) {
// 获取目录下所有文件和子目录
File[] files = directory.listFiles();
if (files != null) {
for (File file : files) {
if (file.isFile() && file.getName().endsWith(fileType)) {
// 如果是文件且是指定类型,累加文件大小
totalSize += file.length();
} else if (file.isDirectory()) {
// 如果是目录,递归计算子目录下指定类型文件的大小
totalSize += calculateTotalFileSize(file.getAbsolutePath(), fileType);
}
}
}
} else {
System.err.println("Directory does not exist or is not a directory");
}
return totalSize;
}
}
将字节数自动转换为合适的单位(MB 或 GB)时,可以编写一个方法来执行这个转换。以下是一个Java方法,它可以将字节数转换为适合的单位(B, KB, MB, GB),并输出一个带单位的字符串:
public class ByteConverter {
public static void main(String[] args) {
long bytes = 12425976;
String size = convertBytes(bytes);
System.out.println("12425976 bytes is approximately " + size);
}
public static String convertBytes(long bytes) {
int unit = 1024;
if (bytes < unit) return bytes + " B";
int exp = (int) (Math.log(bytes) / Math.log(unit));
String pre = "KMGTPE".charAt(exp-1) + "i";
return String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre);
}
```java
public class ByteConverter {
public static void main(String[] args) {
long bytes = 12425976;
String size = convertBytes(bytes);
System.out.println("12425976 bytes is approximately " + size);
}
public static String convertBytes(long bytes) {
int unit = 1024;
if (bytes < unit) return bytes + " B";
int exp = (int) (Math.log(bytes) / Math.log(unit));
String pre = "KMGTPE".charAt(exp-1) + "i";
return String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre);
}
}
这段代码定义了一个 convertBytes 方法,它接受一个 long 类型的字节数作为输入,并返回一个带有合适单位的字符串表示。这个方法会根据字节数自动选择合适的单位(B, KB, MB, GB 等),并进行四舍五入到小数点后一位。