【java替换文件内容】 根据项目路径,给bean添加别名

package com.example.demo.test;


import org.apache.logging.log4j.util.Strings;
import org.springframework.util.StringUtils;

import java.io.*;
import java.util.*;

/**
 * 根据路径,给bean添加别名
 *
 * @version 1.0
 * @Author 张盛君
 * @Date 2022/10/27 21:38
 */

public class WriteTest {

    public static void main(String[] args) throws IOException {
        long start = System.currentTimeMillis();
        // 需求修改的项目路径
        String path = "D:\\test\\java";
        List<File> allFile = getAllFile(path);
        int count = 0;
        for (File file : allFile) {
            count += replaceFile(file.getAbsolutePath());
        }
        long end = System.currentTimeMillis();
        long p = end - start;
        System.out.println("替换成功了:" + count + " 个java文件,总耗时 " + p + " 毫秒");
    }

    public static int replaceFile(String filePath) throws IOException {
        int count = 0;
        File file = new File(filePath);
        Long fileLength = file.length();
        byte[] fileContext = new byte[fileLength.intValue()];
        FileInputStream in = new FileInputStream(filePath);
        in.read(fileContext);
        in.close();
        String context = new String(fileContext);
        String oldAnnotation = getAnnotation(context);
        if (Strings.isNotBlank(oldAnnotation)) {
            //输出文件名(去后缀)
            String fileNamePrefix = filePath.substring(filePath.lastIndexOf("\\") + 1, filePath.split("\\.")[0].length());
            String alis = firstLetterToLowerCase(fileNamePrefix);
            String annotationName = "\"" + alis + "\"";
            String newAnnotation = oldAnnotation + "(" + annotationName + ")";
            context = context.replace(oldAnnotation, newAnnotation);
            count++;
        }
        PrintWriter out = new PrintWriter(filePath);
        out.write(context.toCharArray());
        out.flush();
        out.close();
        return count;
    }

    /**
     * 获得注解名称
     *
     * @param context java文件内容
     * @return 注解名称
     */
    public static String getAnnotation(String context) {
        Set<String> beanSet = new HashSet<>(Arrays.asList("@Service", "@Component", "@Configurable", "@Repository"));
        for (String beanName : beanSet) {
            if (context.contains(beanName)) {
                String annotationName = beanName + "(";
                if (!context.contains(annotationName)) {
                    return beanName;
                }
            }
        }
        return null;
    }

    /**
     * 获取指定文件夹下所有文件,不含文件夹里的文件
     *
     * @param dirFilePath 文件夹路径
     * @return
     */
    public static List<File> getAllFile(String dirFilePath) {
        if (Strings.isBlank(dirFilePath)) {
            return null;
        }
        return getAllFile(new File(dirFilePath));
    }


    /**
     * 获取指定文件夹下所有文件,不含文件夹里的文件
     *
     * @param dirFile 文件夹
     * @return
     */
    public static List<File> getAllFile(File dirFile) {
        // 如果文件夹不存在或着不是文件夹,则返回 null
        if (Objects.isNull(dirFile) || !dirFile.exists() || dirFile.isFile())
            return null;

        File[] childrenFiles = dirFile.listFiles();
        if (Objects.isNull(childrenFiles) || childrenFiles.length == 0) {
            return null;
        }
        List<File> files = new ArrayList<>();
        for (File childFile : childrenFiles) {
            // 如果是文件,直接添加到结果集合
            if (childFile.isFile()) {
                String fileName = childFile.getName();
                if (Strings.isNotBlank(fileName) && fileName.length() > 4) {
                    String fileNameSuffix = fileName.substring(fileName.length() - 4);
                    if ("java".equals(fileNameSuffix)) {
                        files.add(childFile);
                    }
                }

            } else {
                // 如果是文件夹,则将其内部文件添加进结果集合
                List<File> cFiles = getAllFile(childFile);
                if (Objects.isNull(cFiles) || cFiles.isEmpty()) {
                    continue;
                } else {
                    files.addAll(cFiles);
                }
            }
        }
        return files;
    }

    // 首字母变小写
    public static String firstLetterToLowerCase(String str) {
        String retStr = str.substring(0, 1);
        return retStr.toLowerCase() + str.substring(1, str.length());
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值