概述
针对如下情况,写了这个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注解、属性改驼峰)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复