JavaBean的get、set方法生成器
2010-11-23 18:39
239 查看
來源:http://www.crazyit.org/redirect.php?tid=3779&goto=lastpost
BeanGenerator.java
package codegen;
import java.io.File;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.RandomAccessFile;
import java.util.List;
import java.util.ArrayList;
public class BeanGenerator
{
//存放Bean的类名
private String className;
//接收生成Bean的文件
private File file;
//Bean属性和其属性对应的类型的元数据List
private List<BeanInfo> bList = new ArrayList<BeanInfo>();
//写入流
private RandomAccessFile raf = null;
//构造方法的参数字符串
private StringBuffer paramsBuffer = new StringBuffer();
//用来标识构造器参数何时加上","
private boolean bFirst = true;
//解析Bean的属性和其属性对应的类型
private void parse(File file) throws Exception
{
//保存解析的Bean文件
this.file = file;
//解析出类名
this.className = file.getName().substring(0, file.getName().indexOf("."));
//读取Bean文件
BufferedReader br = new BufferedReader(new FileReader(file));
String strLine = null;
//逐行读取文件内容
while ((strLine = br.readLine()) != null)
{
//当行内容同时包含private关键字和";"号时则解析该行字符串
if (strLine.contains("private") && strLine.contains(";"))
{
//获取类型字符串第一个字符的起始位置
Integer leftLoc = strLine.indexOf("private ") + "private ".length();
//获取属性名最后一个字符的位置
Integer rightLoc = strLine.indexOf(";");
//解析出属性类型和属性名,数组[0]为属性类型,数组[1]为属性名
String[] tmpStr = strLine.substring(leftLoc, rightLoc).split(" ");
//装Bean元数据封装并放入集合中
bList.add(new BeanInfo(tmpStr[0], tmpStr[1]));
}
}
}
//生成Bean的get、set方法和构造方法
private void generateSetGetConstructor() throws Exception
{
raf = new RandomAccessFile(file, "rw");
raf.seek(file.length() - 3);
raf.writeBytes("/r/n");
//--------------------生成Bean的构造方法-------------------
for (BeanInfo beanInfo : bList)
{
if (bFirst)
{
//第一次构造方法的参数后不加","
paramsBuffer.append(beanInfo.getType() + " "
+ beanInfo.getAttr());
bFirst = false;
}
else
{
//当参数列表过长时自动换行
if (paramsBuffer.length() >= 40)
{
paramsBuffer.append("/r/n/t/t" + ", " + beanInfo.getType()
+ " " + beanInfo.getAttr());
}
else
{
paramsBuffer.append(", " + beanInfo.getType()
+ " " + beanInfo.getAttr());
}
}
}
//避免中文问题输出时是乱码
raf.write("/t//无参数构造器/r/n".getBytes());
//无参数的构造器
raf.writeBytes("/tpublic " + className + "()/r/n/t{/r/n/t}/r/n");
//增加注释
raf.write("/t//初始化全部属性的构造器/r/n".getBytes());
raf.writeBytes("/tpublic " + className + "("
+ paramsBuffer.toString() + ")" + "/r/n/t{/r/n");
for (BeanInfo beanInfo : bList)
{
raf.writeBytes("/t/t");
raf.writeBytes("this." + beanInfo.getAttr()
+ " = " + beanInfo.getAttr() + ";");
raf.writeBytes("/r/n");
}
raf.writeBytes("/t}/r/n");
//----------------------------------------------------------
for (BeanInfo beanInfo : bList)
{
//增加注释
raf.writeBytes("/t//" + beanInfo.getAttr());
raf.write("属性的setter和getter方法".getBytes());
raf.writeBytes("/r/n");
//--------------------生成Bean的set方法---------------------
raf.writeBytes("/tpublic void set"
+ beanInfo.getAttr().substring(0, 1).toUpperCase()
+ beanInfo.getAttr().substring(1)
+ "(" + beanInfo.getType() + " " + beanInfo.getAttr()
+ ")" + "/r/n");
raf.writeBytes("/t{" + "/r/n");
raf.writeBytes("/t/tthis." + beanInfo.getAttr()
+ " = " + beanInfo.getAttr() + ";" + "/r/n");
raf.writeBytes("/t}" + "/r/n");
//----------------------------------------------------------
//--------------------生成Bean的get方法---------------------
raf.writeBytes("/tpublic "
+ beanInfo.getType() + " get"
+ beanInfo.getAttr().substring(0, 1).toUpperCase()
+ beanInfo.getAttr().substring(1) + "()" + "/r/n");
raf.writeBytes("/t{" + "/r/n");
raf.writeBytes("/t/treturn " + beanInfo.getAttr()
+ ";" + "/r/n/t}/r/n");
//----------------------------------------------------------
}
raf.writeBytes("}/r/n");
//关闭写入流
raf.close();
}
public static void main(String[] args) throws Exception
{
BeanGenerator beanGen = new BeanGenerator();
beanGen.parse(new File(args[0]));
beanGen.generateSetGetConstructor();
}
}
BeanInfo.java
package codegen;
//保存Bean属性和其属性类型
class BeanInfo
{
private String type;
private String attr;
public BeanInfo(String type, String attr)
{
this.type = type;
this.attr = attr;
}
public void setType(String type)
{
this.type = type;
}
public String getType()
{
return type;
}
public void setAttr(String attr)
{
this.attr = attr;
}
public String getAttr()
{
return attr;
}
}
配置EditPlus:
测试:
BeanGenerator.java
package codegen;
import java.io.File;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.RandomAccessFile;
import java.util.List;
import java.util.ArrayList;
public class BeanGenerator
{
//存放Bean的类名
private String className;
//接收生成Bean的文件
private File file;
//Bean属性和其属性对应的类型的元数据List
private List<BeanInfo> bList = new ArrayList<BeanInfo>();
//写入流
private RandomAccessFile raf = null;
//构造方法的参数字符串
private StringBuffer paramsBuffer = new StringBuffer();
//用来标识构造器参数何时加上","
private boolean bFirst = true;
//解析Bean的属性和其属性对应的类型
private void parse(File file) throws Exception
{
//保存解析的Bean文件
this.file = file;
//解析出类名
this.className = file.getName().substring(0, file.getName().indexOf("."));
//读取Bean文件
BufferedReader br = new BufferedReader(new FileReader(file));
String strLine = null;
//逐行读取文件内容
while ((strLine = br.readLine()) != null)
{
//当行内容同时包含private关键字和";"号时则解析该行字符串
if (strLine.contains("private") && strLine.contains(";"))
{
//获取类型字符串第一个字符的起始位置
Integer leftLoc = strLine.indexOf("private ") + "private ".length();
//获取属性名最后一个字符的位置
Integer rightLoc = strLine.indexOf(";");
//解析出属性类型和属性名,数组[0]为属性类型,数组[1]为属性名
String[] tmpStr = strLine.substring(leftLoc, rightLoc).split(" ");
//装Bean元数据封装并放入集合中
bList.add(new BeanInfo(tmpStr[0], tmpStr[1]));
}
}
}
//生成Bean的get、set方法和构造方法
private void generateSetGetConstructor() throws Exception
{
raf = new RandomAccessFile(file, "rw");
raf.seek(file.length() - 3);
raf.writeBytes("/r/n");
//--------------------生成Bean的构造方法-------------------
for (BeanInfo beanInfo : bList)
{
if (bFirst)
{
//第一次构造方法的参数后不加","
paramsBuffer.append(beanInfo.getType() + " "
+ beanInfo.getAttr());
bFirst = false;
}
else
{
//当参数列表过长时自动换行
if (paramsBuffer.length() >= 40)
{
paramsBuffer.append("/r/n/t/t" + ", " + beanInfo.getType()
+ " " + beanInfo.getAttr());
}
else
{
paramsBuffer.append(", " + beanInfo.getType()
+ " " + beanInfo.getAttr());
}
}
}
//避免中文问题输出时是乱码
raf.write("/t//无参数构造器/r/n".getBytes());
//无参数的构造器
raf.writeBytes("/tpublic " + className + "()/r/n/t{/r/n/t}/r/n");
//增加注释
raf.write("/t//初始化全部属性的构造器/r/n".getBytes());
raf.writeBytes("/tpublic " + className + "("
+ paramsBuffer.toString() + ")" + "/r/n/t{/r/n");
for (BeanInfo beanInfo : bList)
{
raf.writeBytes("/t/t");
raf.writeBytes("this." + beanInfo.getAttr()
+ " = " + beanInfo.getAttr() + ";");
raf.writeBytes("/r/n");
}
raf.writeBytes("/t}/r/n");
//----------------------------------------------------------
for (BeanInfo beanInfo : bList)
{
//增加注释
raf.writeBytes("/t//" + beanInfo.getAttr());
raf.write("属性的setter和getter方法".getBytes());
raf.writeBytes("/r/n");
//--------------------生成Bean的set方法---------------------
raf.writeBytes("/tpublic void set"
+ beanInfo.getAttr().substring(0, 1).toUpperCase()
+ beanInfo.getAttr().substring(1)
+ "(" + beanInfo.getType() + " " + beanInfo.getAttr()
+ ")" + "/r/n");
raf.writeBytes("/t{" + "/r/n");
raf.writeBytes("/t/tthis." + beanInfo.getAttr()
+ " = " + beanInfo.getAttr() + ";" + "/r/n");
raf.writeBytes("/t}" + "/r/n");
//----------------------------------------------------------
//--------------------生成Bean的get方法---------------------
raf.writeBytes("/tpublic "
+ beanInfo.getType() + " get"
+ beanInfo.getAttr().substring(0, 1).toUpperCase()
+ beanInfo.getAttr().substring(1) + "()" + "/r/n");
raf.writeBytes("/t{" + "/r/n");
raf.writeBytes("/t/treturn " + beanInfo.getAttr()
+ ";" + "/r/n/t}/r/n");
//----------------------------------------------------------
}
raf.writeBytes("}/r/n");
//关闭写入流
raf.close();
}
public static void main(String[] args) throws Exception
{
BeanGenerator beanGen = new BeanGenerator();
beanGen.parse(new File(args[0]));
beanGen.generateSetGetConstructor();
}
}
BeanInfo.java
package codegen;
//保存Bean属性和其属性类型
class BeanInfo
{
private String type;
private String attr;
public BeanInfo(String type, String attr)
{
this.type = type;
this.attr = attr;
}
public void setType(String type)
{
this.type = type;
}
public String getType()
{
return type;
}
public void setAttr(String attr)
{
this.attr = attr;
}
public String getAttr()
{
return attr;
}
}
配置EditPlus:
测试:
相关文章推荐
- javabean 注解替换set/get方法
- Myeclipse自动生成javabean的get和set方法
- JavaBean自动生成get和set方法
- 属性生成器、set get 方法
- JavaBean的get、set方法引发的讨论
- 使用java反射机制动态调用javabean的get,set方法
- 使用BeanUtils.populate方法转化Map为Javabean时get与set方法的命名规则
- object 类的set和get方法,点语法 和 属性生成器
- 如何在Android Studio中快速的写javabean的set和get方法
- struts2和javabean的set/get方法命名规范不一致解决办法
- MyEclipse自动生成javaBean的set和get方法、构造方法
- 03.黑马程序员-封装-set方法与get方法
- Android Studio快速生成set get以及构造方法的快捷方式
- PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep
- java类中为什么设置set和get方法操作属性
- JAVA中关于set()和get()方法的理解及使用
- java中get方法,和set方法的使用实例
- Java反射实体类属性(get ,set方法)
- linux内核中操作文件的方法--使用get_fs()和set_fs(KERNEL_DS)
- 魔术方法:__set、__get