我是靠谱客的博主 无聊火车,最近开发中收集的这篇文章主要介绍Java文件操作(添加xml注解、属性改驼峰),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

针对如下情况,写了这个Java文件操作类:

1.有时候项目要求报文必须是XML格式并且节点为大写加下划线

2.第三方接口报文是xml格式,且字段带下划线

3.创建数据库表实体类

4.移出所有xml

由于手动修改比较费时且容易出错,所以写了这个工具类,代码如下:

package com.qufeng.cq.util;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;

import java.io.File;
import java.io.IOException;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 操作XML注解
 *@author qufeng
 *@Date 2020年11月10日
 * 
 */
public class JavaFileUtils {
	private static final String YYYY_MM_DD_HH_MM_SS_SSS ="yyyyMMddhhmmssSSS";
	private static final String ENCODING = "UTF-8"; 
	
	/**
	 * 添加XML注解 大写加下划线
	 * @param productPath 项目地址 为空的话取当前路径
	 * @param clazz
	 * @param backup 是否备份
	 * @throws IOException
	 */
	public static void addXmlUpperUnderLine(String productPath, Class<?> clazz, boolean backup) throws IOException{
		productPath = StringUtils.isBlank(productPath) ? new File("").getAbsolutePath().toLowerCase() : productPath;
		//根路径
		String rootPath = productPath + "/src/main/java/";
		//包路径
		String packagePath = clazz.getPackage().getName().replaceAll("\.", "/");
		//类名
		String className = clazz.getSimpleName();
		//文件呢路径
		String filePath = rootPath + "/" + packagePath + "/" + className + ".java";
		Field[] dields = clazz.getDeclaredFields();
		List<String> fieldNames = new ArrayList<>(); 
		for(Field field : dields){
			fieldNames.add(field.getName());
		}
		fieldNames.remove("serialVersionUID");//移出序列化属性
		File file = new File(filePath);
		List<String> lines = FileUtils.readLines(file, ENCODING);
		if(dields.length > 0){
			lines.add(2, "import javax.xml.bind.annotation.XmlElement;");
		}
		List<String> newLines = new ArrayList<>();
		boolean firstWrap = true;//第一次添加wrapper包
		for (String line : lines) {
			String tempLine = line.trim();
			//非空白行 且非注释行
			if(!tempLine.equals("") && tempLine.indexOf("//") != 0){
				String[] temp = tempLine.split(";")[0].split("=")[0].trim().split(" ");//截取;和=
				tempLine = temp[temp.length-1];
				temp = tempLine.split("\.");//截取.
				tempLine = temp[temp.length-1];
				for (String fieldName : fieldNames) {
					if(tempLine.equals(fieldName)){
						newLines.add("	@XmlElement(name = ""+ StringUtil.toUpperUnderLine(fieldName)+"")");
						if(line.contains(" List<")){
							if(firstWrap){
								newLines.add(2, "import javax.xml.bind.annotation.XmlElementWrapper;");
								firstWrap = false;
							}
							newLines.add("	@XmlElementWrapper(required = false)");
						}
						fieldNames.remove(fieldName);
						break;
					}
				}
			}
			newLines.add(line);
		}
		if(backup){//备份
			file.renameTo(new File(filePath + "." + new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS_SSS).format(new Date())));
		}
		FileUtils.writeLines(file, "UTF-8", newLines);
		System.out.println("添加xml注解成功.......................");
	}
	
	/**
	 * 移出XML注解
	 * @param productPath 项目地址 为空的话取当前路径
	 * @param clazz
	 * @param backup 是否备份
	 * @throws IOException
	 */
	public static void removeXmlAnnotation(String productPath, Class<?> clazz, boolean backup) throws IOException{
		productPath = StringUtils.isBlank(productPath) ? new File("").getAbsolutePath().toLowerCase() : productPath;
		//根路径
		String rootPath = productPath + "/src/main/java/";
		//包路径
		String packagePath = clazz.getPackage().getName().replaceAll("\.", "/");
		//类名
		String className = clazz.getSimpleName();
		//文件呢路径
		String filePath = rootPath + "/" + packagePath + "/" + className + ".java";
		File file = new File(filePath);
		List<String> lines = FileUtils.readLines(file, ENCODING);
		List<String> newLines = new ArrayList<>();
		for (String line : lines) {
			String tempLine = line.trim();
			//非空白行 且非注释行
			if(!tempLine.equals("") && tempLine.indexOf("//") != 0){
				if(tempLine.contains("javax.xml.bind.annotation") || tempLine.contains("XmlElement")){
					continue;
				}
			}
			newLines.add(line);
		}
		if(backup){//备份
			file.renameTo(new File(filePath + "." + new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS_SSS).format(new Date())));
		}
		FileUtils.writeLines(file, ENCODING, newLines);
		System.out.println("移出xml注解成功.......................");
	}
	
	/**
	 * 添加XML注解 并把bean属性改为驼峰
	 * @param productPath 项目地址 为空的话取当前路径
	 * @param clazz
	 * @param backup 是否备份
	 * @throws IOException
	 */
	public static void addXmlUpdateFieldCamel(String productPath, Class<?> clazz, boolean backup) throws IOException{
		productPath = StringUtils.isBlank(productPath) ? new File("").getAbsolutePath().toLowerCase() : productPath;
		//根路径
		String rootPath = productPath + "/src/main/java/";
		//包路径
		String packagePath = clazz.getPackage().getName().replaceAll("\.", "/");
		//类名
		String className = clazz.getSimpleName();
		//文件呢路径
		String filePath = rootPath + "/" + packagePath + "/" + className + ".java";
		Field[] dields = clazz.getDeclaredFields();
		List<String> fieldNames = new ArrayList<>(); 
		for(Field field : dields){
			fieldNames.add(field.getName());
		}
		fieldNames.remove("serialVersionUID");//移出序列化属性
		File file = new File(filePath);
		List<String> lines = FileUtils.readLines(file, ENCODING);
		if(dields.length > 0){
			lines.add(2, "import javax.xml.bind.annotation.XmlElement;");
		}
		List<String> newLines = new ArrayList<>();
		boolean firstWrap = true;//第一次添加wrapper包
		for (String line : lines) {
			String tempLine = line.trim();
			//非空白行 且非注释行
			if(!tempLine.equals("") && tempLine.indexOf("//") != 0){
				String[] temp = tempLine.split(";")[0].split("=")[0].trim().split(" ");//截取;和=
				tempLine = temp[temp.length-1];
				temp = tempLine.split("\.");//截取.
				tempLine = temp[temp.length-1];
				for (String fieldName : fieldNames) {
					if(tempLine.equals(fieldName)){
						tempLine = StringUtil.toCamel(tempLine);
						line = line.replace(" " + fieldName, " " + tempLine);//为了防止属性为其他单词的一部分 加空格替换
						newLines.add("	@XmlElement(name = ""+ fieldName+"")");
						if(line.contains(" List<")){
							if(firstWrap){
								newLines.add(2, "import javax.xml.bind.annotation.XmlElementWrapper;");
								firstWrap = false;
							}
							newLines.add("	@XmlElementWrapper(required = false)");
						}
						fieldNames.remove(fieldName);
						break;
					}
				}
			}
			newLines.add(line);
		}
		if(backup){//备份
			file.renameTo(new File(filePath + "." + new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS_SSS).format(new Date())));
		}
		FileUtils.writeLines(file, "UTF-8", newLines);
		System.out.println("添加xml注解,并把bean属性改为驼峰成功.......................");
	}
	
	/**
	 * 把bean属性改为驼峰
	 * @param productPath 项目地址 为空的话取当前路径
	 * @param clazz
	 * @param backup 是否备份
	 * @throws IOException
	 */
	public static void updateFieldCamel(String productPath, Class<?> clazz, boolean backup) throws IOException{
		productPath = StringUtils.isBlank(productPath) ? new File("").getAbsolutePath().toLowerCase() : productPath;
		//根路径
		String rootPath = productPath + "/src/main/java/";
		//包路径
		String packagePath = clazz.getPackage().getName().replaceAll("\.", "/");
		//类名
		String className = clazz.getSimpleName();
		//文件呢路径
		String filePath = rootPath + "/" + packagePath + "/" + className + ".java";
		Field[] dields = clazz.getDeclaredFields();
		List<String> fieldNames = new ArrayList<>(); 
		for(Field field : dields){
			fieldNames.add(field.getName());
		}
		fieldNames.remove("serialVersionUID");//移出序列化属性
		File file = new File(filePath);
		List<String> lines = FileUtils.readLines(file, ENCODING);
		List<String> newLines = new ArrayList<>();
		for (String line : lines) {
			String tempLine = line.trim();
			//非空白行 且非注释行
			if(!tempLine.equals("") && tempLine.indexOf("//") != 0){
				String[] temp = tempLine.split(";")[0].split("=")[0].trim().split(" ");//截取;和=
				tempLine = temp[temp.length-1];
				temp = tempLine.split("\.");//截取.
				tempLine = temp[temp.length-1];
				for (String fieldName : fieldNames) {
					if(tempLine.equals(fieldName)){
						tempLine = StringUtil.toCamel(tempLine);
						line = line.replace(" " + fieldName, " " + tempLine);//为了防止属性为其他单词的一部分 加空格替换
						fieldNames.remove(fieldName);
						break;
					}
				}
			}
			newLines.add(line);
		}
		if(backup){//备份
			file.renameTo(new File(filePath + "." + new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS_SSS).format(new Date())));
		}
		FileUtils.writeLines(file, "UTF-8", newLines);
		System.out.println("把bean属性改为驼峰成功.......................");
	}
	
	
	public static void main(String[] args) throws IOException {
		//添加Xml注解 大写加下划线
//		addXmlUpperUnderLine(null, StudentInVo.class, false);
		
		//移出Xml注解
//		removeXmlAnnotation(null, StudentInVo.class, false);
		
		//添加XML注解 并把bean属性改为驼峰
//		addXmlUpdateFieldCamel(null, Teacher.class, false);
		
		//把bean属性改为驼峰
//		updateFieldCamel(null, Teacher.class, false);
	}
}


字符串操作类:

package com.manning.readinglist.vo;
/**
 * 
 *@author qufeng
 *@Date 2020年11月12日
 * 
 */
public class StringUtil {

	/**
	 * 驼峰转大写加下划线
	 * @param name
	 * @return
	 */
	public static String toUpperUnderLine(String name){
		char[] chs = name.toCharArray();
		StringBuffer sb = new StringBuffer();
		for(int i = 0; i < chs.length; i++){
			if(isLower(chs[i])){//小写
				sb.append((char)(chs[i] - 32));
			}else if(isUpper(chs[i])){//大写
				if(i > 0){//下划线
					sb.append("_");
				}
				sb.append(chs[i]);
			}else{//特殊字符
				sb.append(chs[i]);
			}
		}
		return sb.toString();
	}
	
	/**
	 * 转驼峰
	 * @param name
	 * @return
	 */
	public static String toCamel(String name){
		name = name.toLowerCase();//先转小写
		String[] strs = name.split("_");
		StringBuffer sb = new StringBuffer();
		for(int i = 0; i < strs.length; i++){
				if(i == 0){
					sb.append(strs[i]);
				}else{
					sb.append((char)(strs[i].charAt(0) - 32)).append(strs[i].substring(1));
			}
		}
		return sb.toString();
	}
	
	/**
	 * 是否小写
	 * @param ch
	 * @return
	 */
	public static boolean isLower(char ch){
		return ch >= 'a' && ch <= 'z';
	}
	
	/**
	 * 是否小大写
	 * @param ch
	 * @return
	 */
	public static boolean isUpper(char ch){
		return ch >= 'A' && ch <= 'Z';
	}
	
	public static void main(String[] args) {
		System.out.println(toCamel("1CLASS_USER_NAME1"));
		System.out.println(toUpperUnderLine("1classUserName1"));
	}
}

 

最后

以上就是无聊火车为你收集整理的Java文件操作(添加xml注解、属性改驼峰)的全部内容,希望文章能够帮你解决Java文件操作(添加xml注解、属性改驼峰)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部