|
@@ -0,0 +1,100 @@
|
|
|
|
+package com.management.platform.util;
|
|
|
|
+
|
|
|
|
+import java.io.*;
|
|
|
|
+import java.nio.file.*;
|
|
|
|
+import java.util.*;
|
|
|
|
+import java.util.regex.*;
|
|
|
|
+import java.util.Scanner;
|
|
|
|
+
|
|
|
|
+public class JavaFileProcessor {
|
|
|
|
+
|
|
|
|
+ public static void main(String[] args) {
|
|
|
|
+ // 使用 Scanner 从控制台读取文件目录路径和输出文件路径
|
|
|
|
+ Scanner scanner = new Scanner(System.in);
|
|
|
|
+ System.out.print("请输入要处理的文件夹路径: ");
|
|
|
|
+ String directoryPath = scanner.nextLine(); // 读取输入的目录路径
|
|
|
|
+ System.out.print("请输入输出文件的路径: ");
|
|
|
|
+ String outputFilePath = scanner.nextLine(); // 读取输入的输出文件路径
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ String fileName = System.currentTimeMillis() + ".txt";
|
|
|
|
+ List<String> allFiles = getJavaFiles(directoryPath );
|
|
|
|
+ List<String> combinedLines = new ArrayList<>();
|
|
|
|
+
|
|
|
|
+ // 合并所有 Java 文件的有效代码
|
|
|
|
+ for (String filePath : allFiles) {
|
|
|
|
+ combinedLines.addAll(processJavaFile(filePath));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 获取合并后的前1500行和后1500行
|
|
|
|
+ List<String> finalLines = getFinalLines(combinedLines);
|
|
|
|
+
|
|
|
|
+ // 输出到文件
|
|
|
|
+ BufferedWriter writer = new BufferedWriter(new FileWriter(outputFilePath + File.separator + fileName));
|
|
|
|
+ for (String line : finalLines) {
|
|
|
|
+ writer.write(line);
|
|
|
|
+ writer.newLine();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ writer.close();
|
|
|
|
+ System.out.println("处理完成,输出已保存至 " + outputFilePath);
|
|
|
|
+
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ } finally {
|
|
|
|
+ scanner.close();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 获取指定目录下所有的 Java 文件
|
|
|
|
+ private static List<String> getJavaFiles(String directoryPath) throws IOException {
|
|
|
|
+ List<String> javaFiles = new ArrayList<>();
|
|
|
|
+ Files.walk(Paths.get(directoryPath))
|
|
|
|
+ .filter(p -> p.toString().endsWith(".java"))
|
|
|
|
+ .forEach(p -> javaFiles.add(p.toString()));
|
|
|
|
+ return javaFiles;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 处理每个 Java 文件,读取有效的代码行(去掉空行和版权信息)
|
|
|
|
+ private static List<String> processJavaFile(String filePath) throws IOException {
|
|
|
|
+ List<String> lines = Files.readAllLines(Paths.get(filePath));
|
|
|
|
+ List<String> filteredLines = new ArrayList<>();
|
|
|
|
+
|
|
|
|
+ for (String line : lines) {
|
|
|
|
+ // 排除空行和包含版权/作者信息的行
|
|
|
|
+ if (line.trim().isEmpty() || isAuthorOrCopyrightLine(line)) {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ filteredLines.add(line);
|
|
|
|
+ }
|
|
|
|
+ return filteredLines;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 获取合并后的前1500行和后1500行
|
|
|
|
+ private static List<String> getFinalLines(List<String> combinedLines) {
|
|
|
|
+ int totalLines = combinedLines.size();
|
|
|
|
+ int start = Math.min(1500, totalLines); // 前1500行
|
|
|
|
+ int end = totalLines;
|
|
|
|
+ int endStart = Math.max(totalLines - 1500, start); // 后1500行
|
|
|
|
+
|
|
|
|
+ List<String> finalLines = new ArrayList<>();
|
|
|
|
+ // 添加前1500行
|
|
|
|
+ for (int i = 0; i < start; i++) {
|
|
|
|
+ finalLines.add(combinedLines.get(i));
|
|
|
|
+ }
|
|
|
|
+ // 添加后1500行
|
|
|
|
+ for (int i = endStart; i < end; i++) {
|
|
|
|
+ finalLines.add(combinedLines.get(i));
|
|
|
|
+ }
|
|
|
|
+ return finalLines;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 判断是否为版权、作者等信息的行
|
|
|
|
+ private static boolean isAuthorOrCopyrightLine(String line) {
|
|
|
|
+ // 用正则匹配常见的作者、版权、创建时间等信息
|
|
|
|
+ String regex = "(?i)(author|copyright|created|date|version|license)";
|
|
|
|
+ Pattern pattern = Pattern.compile(regex);
|
|
|
|
+ Matcher matcher = pattern.matcher(line);
|
|
|
|
+ return matcher.find();
|
|
|
|
+ }
|
|
|
|
+}
|