Java代码示例:遍历文件夹子目录并执行Git命令

ChatGPT4o 使用 ChatGPT 4o 回答

问题:

写一段java代码,输入参数为一个文件夹路径,接收到参数后,遍历该文件夹下所有一级子目录,在每个目录执行指令:"git log --author="sthe" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "增加的行数: %s\n删除的行数: %s\n总行数: %s\n", add, subs, loc }'". 控制台输出指令执行结果。

回答:

以下是一个Java代码示例,它接收一个文件夹路径作为参数,遍历该文件夹下的所有一级子目录,并在每个子目录中执行指定的Git命令。执行结果将输出到控制台。

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.util.Arrays;

public class GitLogAnalyzer {

    public static void main(String[] args) {
        if (args.length != 1) {
            System.err.println("请提供一个文件夹路径作为参数。");
            System.exit(1);
        }

        String folderPath = args[0];
        File folder = new File(folderPath);

        if (!folder.isDirectory()) {
            System.err.println("提供的路径不是一个有效的文件夹。");
            System.exit(1);
        }

        File[] subDirs = folder.listFiles(File::isDirectory);
        if (subDirs == null) {
            System.err.println("无法读取文件夹内容。");
            System.exit(1);
        }

        Arrays.stream(subDirs).forEach(subDir -> {
            try {
                ProcessBuilder processBuilder = new ProcessBuilder(
                        "sh", "-c", "git log --author=\"sthe\" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf \"增加的行数: %s\\n删除的行数: %s\\n总行数: %s\\n\", add, subs, loc }'"
                );
                processBuilder.directory(subDir);
                processBuilder.redirectErrorStream(true);

                Process process = processBuilder.start();
                BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                String line;
                System.out.println("目录: " + subDir.getName());
                while ((line = reader.readLine()) != null) {
                    System.out.println(line);
                }
                process.waitFor();
            } catch (Exception e) {
                System.err.println("在目录 " + subDir.getName() + " 执行命令时出错: " + e.getMessage());
            }
        });
    }
}

代码说明:

  1. 参数检查:首先检查是否提供了一个文件夹路径作为参数。
  2. 文件夹验证:验证提供的路径是否是一个有效的文件夹。
  3. 遍历子目录:获取文件夹下的所有一级子目录。
  4. 执行Git命令:在每个子目录中执行指定的Git命令,并输出结果到控制台。

使用方法:

  1. 将上述代码保存为一个Java文件,例如 GitLogAnalyzer.java
  2. 编译代码:javac GitLogAnalyzer.java
  3. 运行代码并提供文件夹路径作为参数:java GitLogAnalyzer /path/to/your/folder

请确保在运行此代码之前,您已经安装了Git,并且在每个子目录中有一个Git仓库。