写一段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());
}
});
}
}
GitLogAnalyzer.java
。javac GitLogAnalyzer.java
java GitLogAnalyzer /path/to/your/folder
请确保在运行此代码之前,您已经安装了Git,并且在每个子目录中有一个Git仓库。