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());
}
}
【java替换文件内容】 根据项目路径,给bean添加别名
于 2022-11-17 22:40:48 首次发布