AutoFileGeneratorAutoFileGenerator

测试代码

import java.io.*;
import java.nio.file.*;
import java.util.*;
import java.util.regex.*;

public class AutoFileGenerator {
    
    /**
     * 自动生成文件的方法
     * @param filePath 文件路径
     * @param fileName 文件名
     * @param content 方法内容
     * @throws IOException 如果文件操作异常
     */
    public static void generateFile(String filePath, String fileName, String content) throws IOException {
        // 创建文件路径对象
        Path directory = Paths.get(filePath);
        
        // 如果路径不存在,创建目录
        if (!Files.exists(directory)) {
            Files.createDirectories(directory);
            System.out.println("创建目录: " + directory);
        }
        
        // 判断内容类型
        String fileType = determineFileType(content);
        if (!fileName.endsWith(fileType)) {
            fileName = fileName + "." + fileType;
        }
        
        Path filePath1 = directory.resolve(fileName);
        
        // 检查文件是否已存在
        if (Files.exists(filePath1)) {
            System.out.println("文件已存在,进行合并操作: " + filePath1);
            
            // 读取原文件内容
            String originalContent = Files.readString(filePath1);
            
            // 根据文件类型执行不同的合并逻辑
            if (fileType.equals("java")) {
                String mergedContent = mergeJavaContent(originalContent, content);
                Files.writeString(filePath1, mergedContent);
            } else if (fileType.equals("xml")) {
                String mergedContent = mergeXmlContent(originalContent, content);
                Files.writeString(filePath1, mergedContent);
            }
            
            System.out.println("文件更新成功: " + filePath1);
        } else {
            // 文件不存在,直接创建
            Files.writeString(filePath1, formatContent(content, fileType));
            System.out.println("文件创建成功: " + filePath1);
        }
    }
    
    /**
     * 根据内容判断文件类型
     * @param content 文件内容
     * @return 文件类型 (java 或 xml)
     */
    private static String determineFileType(String content) {
        // 检查是否包含XML特征
        if (content.contains("<?xml") || content.contains("<mapper") || 
            content.contains("<select") || content.contains("<insert") || 
            content.contains("<update") || content.contains("<delete")) {
            return "xml";
        } else {
            // 默认为Java
            return "java";
        }
    }
    
    /**
     * 合并Java内容
     * @param originalContent 原文件内容
     * @param newContent 新内容
     * @return 合并后的内容
     */
    private static String mergeJavaContent(String originalContent, String newContent) {
        // 提取新内容中的方法
        List<String> methods = extractJavaMethods(newContent);
        
        // 在类的结尾前插入新方法
        StringBuilder result = new StringBuilder(originalContent);
        
        // 查找类的结尾位置
        int endBraceIndex = originalContent.lastIndexOf("}");
        
        if (endBraceIndex != -1) {
            for (String method : methods) {
                // 检查方法是否已存在
                String methodName = extractJavaMethodName(method);
                if (methodName != null && !originalContent.contains(methodName)) {
                    // 方法不存在,插入到类结尾前
                    result.insert(endBraceIndex, "\n" + method + "\n");
                }
            }
        }
        
        return result.toString();
    }
    
    /**
     * 提取Java方法名
     * @param methodCode 方法代码
     * @return 方法名
     */
    private static String extractJavaMethodName(String methodCode) {
        // 匹配方法定义
        Pattern pattern = Pattern.compile("(public|private|protected)?\\s+(static)?\\s*[\\w<>\\[\\],\\s]+\\s+(\\w+)\\s*\\(");
        Matcher matcher = pattern.matcher(methodCode);
        
        if (matcher.find()) {
            return matcher.group(3); // 返回方法名
        }
        
        return null;
    }
    
    /**
     * 提取Java方法
     * @param content Java内容
     * @return 方法列表
     */
    private static List<String> extractJavaMethods(String content) {
        List<String> methods = new ArrayList<>();
        
        // 如果是完整类,提取类中的方法
        if (content.contains("class ")) {
            // 移除类定义和导入语句等
            int classBodyStart = content.indexOf("{");
            int classBodyEnd = content.lastIndexOf("}");
            
            if (classBodyStart != -1 && classBodyEnd != -1) {
                content = content.substring(classBodyStart + 1, classBodyEnd);
            }
        }
        
        // 提取方法
        Pattern methodPattern = Pattern.compile("(public|private|protected)?\\s+(static)?\\s*[\\w<>\\[\\],\\s]+\\s+\\w+\\s*\\([^\\)]*\\)\\s*\\{[^\\{\\}]*(\\{[^\\{\\}]*\\}[^\\{\\}]*)*\\}");
        Matcher methodMatcher = methodPattern.matcher(content);
        
        while (methodMatcher.find()) {
            methods.add(methodMatcher.group(0));
        }
        
        return methods;
    }
    
    /**
     * 合并XML内容
     * @param originalContent 原文件内容
     * @param newContent 新内容
     * @return 合并后的内容
     */
    private static String mergeXmlContent(String originalContent, String newContent) {
        // 提取新内容中的XML块
        List<String> xmlBlocks = extractXmlBlocks(newContent);
        
        // 在mapper结尾标签前插入新的XML块
        StringBuilder result = new StringBuilder(originalContent);
        
        // 查找mapper结尾位置
        int endMapperIndex = originalContent.lastIndexOf("</mapper>");
        
        if (endMapperIndex != -1) {
            for (String block : xmlBlocks) {
                // 提取ID
                String id = extractXmlId(block);
                if (id != null && !originalContent.contains("id=\"" + id + "\"")) {
                    // ID不存在,插入到mapper结尾前
                    result.insert(endMapperIndex, "\n" + block + "\n");
                }
            }
        }
        
        return result.toString();
    }
    
    /**
     * 提取XML块的ID
     * @param xmlBlock XML块
     * @return ID值
     */
    private static String extractXmlId(String xmlBlock) {
        Pattern pattern = Pattern.compile("id=[\"'](.*?)[\"']");
        Matcher matcher = pattern.matcher(xmlBlock);
        
        if (matcher.find()) {
            return matcher.group(1);
        }
        
        return null;
    }
    
    /**
     * 提取XML块
     * @param content XML内容
     * @return XML块列表
     */
    private static List<String> extractXmlBlocks(String content) {
        List<String> blocks = new ArrayList<>();
        
        // 尝试提取select, insert, update, delete等标签块
        Pattern pattern = Pattern.compile("<(select|insert|update|delete|sql|resultMap)\\s+[^>]*>.*?</(select|insert|update|delete|sql|resultMap)>", Pattern.DOTALL);
        Matcher matcher = pattern.matcher(content);
        
        while (matcher.find()) {
            blocks.add(matcher.group(0));
        }
        
        return blocks;
    }
    
    /**
     * 格式化内容
     * @param content 内容
     * @param fileType 文件类型
     * @return 格式化后的内容
     */
    private static String formatContent(String content, String fileType) {
        if (fileType.equals("xml") && !content.contains("<?xml")) {
            // 添加XML声明和mapper标签
            if (!content.contains("<mapper")) {
                return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                       "<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n" +
                       "<mapper namespace=\"\">\n" + 
                       content + 
                       "\n</mapper>";
            } else {
                return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                       "<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n" + 
                       content;
            }
        }
        
        return content;
    }
    
    /**
     * 主方法,用于测试
     */
    public static void main(String[] args) {
        try {
            // 测试例子 - Java文件
            String javaContent = "public void testMethod() {\n    System.out.println(\"Hello World\");\n}";
            generateFile("./output", "TestClass", javaContent);
            
            // 测试例子 - XML文件
            String xmlContent = "<select id=\"findUserById\" resultType=\"User\">\n    SELECT * FROM users WHERE id = #{id}\n</select>";
            generateFile("./output", "UserMapper", xmlContent);
            
            System.out.println("测试完成");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
} 

IEEE33节点电力系统中模拟接入光伏并网simulink仿真(分析电能质量)内容概要:本文档围绕IEEE33节点电力系统中模拟接入光伏并网的Simulink仿真展开,重点分析光伏并网对电能质量的影响。文中构建了完整的光伏发电系统模型,包括光伏阵列、逆变器(如T型三电平逆变器)、并网控制策略及电力系统接口,并通过Simulink仿真平台进行建模与分析。核心内容涵盖MPPT控制、逆变器DPWM调制技术、载波优化以降低开关损耗、并网后的电压波动、谐波畸变等电能质量问题的评估与改善措施。同时,文档提及多种相关仿真案例和技术手段,突出其在电力系统仿真与优化中的综合性与实用性。; 适合人群:具备电力系统、新能源发电或自动化控制基础知识的高校学生、科研人员及从事光伏并网系统设计的工程技术人员。; 使用场景及目标:①开展光伏并网系统对配电网电能质量影响的研究;②学习并掌握基于Simulink的电力电子系统建模与仿真方法;③进行逆变器控制策略(如DPWM、MPPT)的设计与优化;④支撑课程设计、毕业论文或科研项目中的仿真验证环节。; 阅读建议:建议结合Simulink软件实际操作,逐步搭建系统模型,重点关注逆变器控制与并网接口部分的实现细节,同时对比不同工况下的仿真结果以深入理解光伏接入对IEEE33节点系统电能质量的具体影响。
【数据驱动】【航空航天结构的高效损伤检测技术】一种数据驱动的结构健康监测(SHM)方法,用于进行原位评估结构健康状态,即损伤位置和程度,在其中利用了选定位置的引导式兰姆波响应(Matlab代码实现)内容概要:本文介绍了一种基于数据驱动的结构健康监测(SHM)方法,旨在通过引导式兰姆波响应对航空航天等领域的结构进行原位损伤检测,实现对损伤位置和程度的准确评估。该方法利用选定位置的兰姆波传播响应数据,结合信号处理与模式识别技术,构建无需精确物理模型的健康状态评估体系,具有较高的灵敏度与实用性,并提供了基于Matlab的代码实现,便于科研人员复现与进一步开发。; 适合人群:具备一定信号处理、结构力学或无损检测基础知识,从事航空航天、土木工程、智能制造等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于大型结构如飞机、桥梁、风电叶片等的实时健康监测与早期损伤识别;②支撑科研中对数据驱动型故障诊断算法的开发与验证,提升结构安全性评估的自动化水平。; 阅读建议:建议读者结合Matlab代码深入理解兰姆波信号的采集、特征提取与分类流程,注重算法在实际噪声环境下的鲁棒性测试,并可拓展至深度学习等先进模式识别方法以提升检测精度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值