2012年10月6日星期六

getter setter命名规则重定义

getter setter命名规则重定义

奋斗到了凌晨两点半终于把最近项目需要的一个需求搞定了,因为客户端与数据库之间的一个数据服务框架命名规则不符合java的命名规则,所以这里需要做一个转换,大概功能实现了,算法方面还有待优化。。

package readandwrite;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.regex.Pattern;

public class ReadAndWrite {

private static BufferedReader br;
private static BufferedWriter bw;

/**
* @param args
* @throws IOException
*
* 两个问题:1 javabean非规范命名 如开头大写 2 时间 Timestamp将导致的插入问题!!!!!!
*/
public static void main(String[] args) throws IOException {

File dir = new File("d:\\test\\hibernate\\");
String newPath = "d:\\test\\hibernate_new\\";

File file2 = new File(newPath);
if(!file2.exists()) {
file2.mkdir();//创建文件夹
}
File file[] = dir.listFiles();

for (int i = 0; i < file.length; i++) {

if(file[i].isDirectory()) {//文件夹直接跳过
continue;
}

String filename = file[i].getName();

br = new BufferedReader(new InputStreamReader(new FileInputStream(file[i].getAbsolutePath())));

File f = new File(newPath+filename);

if(f.exists()){
f.delete();//删除旧文件,避免重复写入
}
f.createNewFile();

FileWriter fw = new FileWriter(f,true);
bw = new BufferedWriter(fw);

if("java".equals(exn(filename))) {//解析实体类

String data = null;

while((data = br.readLine())!=null)
{
bw.write(split(data)+"\n");
bw.flush();
}

} else if("
String data = null;

while((data = br.readLine())!=null)
{
bw.write(sp2(data)+"\n");
bw.flush();
}
}
}

}

/*
* 获取文件扩展名
*/
public static String exn(String filename) {
int k = filename.lastIndexOf(".");
if(k>-1 && k<(filename.length()-1)) {
return filename.substring(k+1);
} else {
return "";
}
}

/*==============================================解析.java实体类======================================================*/
/*
* 拆分-关键词变小写 1
* 规则:将带有驼峰格式的子串变小写
*/
public static String split(String s) {

String data = "";

String reg = "\\s|\\.|\\,|\\;|\\(|\\)|\\{|\\}|\\\"";

String[] word = s.split(reg);//java标识符

ArrayList<String> tag = new ArrayList<String>();
String[] tem = s.split("");

// 保存标点符号
for(int i=0; i<tem.length; i++)
{
if(tem[i].matches(reg)) {
tag.add(tem[i]);
}
}

int k = 0;
for (int i = 0; i < word.length; i++) {

String fw = format(word[i]);

if(i < tag.size()) {
data += fw+tag.get(i);
} else {
data += fw;
}
k = i;
}

if(tag.size() > k) {
for (int i = k+1; i < tag.size(); i++) {
data += tag.get(i);
}
}

return data;
}

/*
* 驼峰格式子串去大写
*/
public static String format(String str) {
String reg = "([a-z]+[A-Z][a-z]+)*";
Pattern p = Pattern.compile(reg);
if(p.matcher(str).matches()) {
return str.toLowerCase();
}
return str;
}

/*==============================================解析.hbm.
/*
* 拆分-关键词变小写 2
* 将 组合 id name = "" || property name = "" 双引号中的属性值变小写
*/
public static String sp2(String str) {
if(str.contains("<id name") || str.contains("<property name")) {
return split(str);
}
return str;
}
}


TAG: