华为OD机试真题 Java 实现【文件目录大小】【2023 B卷 100分】,附详细解题思路
发布人:shili8
发布时间:2025-03-01 01:01
阅读次数:0
**华为OD机试真题 Java 实现**
**题目描述**
给定一个文件系统的目录结构,要求实现一个函数来计算指定目录及其子目录下的所有文件大小之和。
**输入格式**
* `dir`: 文件系统的根目录* `targetDir`: 需要计算大小的目标目录**输出格式**
* `totalSize`: 目标目录及其子目录下的所有文件大小之和**示例**
假设文件系统结构如下:
root/ ├── dir1/ │ ├── file1.txt│ └── dir2/ │ ├── file2.txt│ └── file3.txt└── dir3/ └── file4.txt
如果我们需要计算 `dir1` 目录及其子目录下的所有文件大小之和,输出应该是:
totalSize =100 +50 +75 =225
**Java 实现**
javaimport java.io.File;
import java.util.ArrayList;
public class Main {
public static int calculateTotalSize(String dir, String targetDir) {
// 初始化总大小为0 int totalSize =0;
// 遍历目标目录及其子目录 File file = new File(dir);
traverseDirectory(file, targetDir);
return totalSize;
}
private static void traverseDirectory(File file, String targetDir) {
if (file.isDirectory()) {
// 如果是目录,则遍历其下所有文件和子目录 File[] files = file.listFiles();
for (File f : files) {
if (f.isDirectory() && !f.getName().equals(targetDir)) {
// 如果是子目录,则递归遍历 traverseDirectory(f, targetDir);
} else if (f.isFile()) {
// 如果是文件,则计算大小并累加 totalSize += f.length();
}
}
}
}
public static void main(String[] args) {
String dir = "root";
String targetDir = "dir1";
int totalSize = calculateTotalSize(dir, targetDir);
System.out.println("totalSize: " + totalSize);
}
}
**详细解题思路**
1. **函数定义**: `calculateTotalSize` 函数接受两个参数:文件系统的根目录 `dir` 和目标目录 `targetDir`。该函数负责计算目标目录及其子目录下的所有文件大小之和。
2. **总大小初始化**: 初始化一个变量 `totalSize` 来存储目标目录及其子目录下的所有文件大小之和,初始值为0。
3. **遍历目录**: 使用 `File` 类的 `listFiles()` 方法遍历目标目录及其子目录。对于每个文件或子目录,执行以下操作:
* 如果是子目录,则递归调用 `traverseDirectory` 函数继续遍历其下所有文件和子目录。
* 如果是文件,则计算其大小并累加到 `totalSize` 中。
4. **返回总大小**: 最终返回 `totalSize` 值,表示目标目录及其子目录下的所有文件大小之和。
**注意事项**
* 这个实现假设文件系统结构遵循 Unix 风格的路径名(使用斜杠 `/` 作为分隔符)。
* 如果需要处理 Windows 风格的路径名(使用反斜杭 `` 作为分隔符),则需要进行适当修改。
* 这个实现仅计算文件大小,不考虑其他类型的文件元数据,如最后修改时间或权限。

