利用javabean技术封装对象
来源:互联网 发布:unity模型优化 编辑:程序博客网 时间:2024/06/03 05:03
利用JavaBean技术读取文本内容并封装成对象:
(此方法可以演变为将 request中的参数,ResultSet中的数据,封装成对象)
javabean 规范:http://www.oracle.com/technetwork/java/javase/documentation/spec-136004.html
1 .要封装的对象:
public class User {
private int id;
private String name;
private Integerage;
public int getId() {
returnid;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
returnname;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
returnage;
}
public void setAge(Integer age) {
this.age = age;
}
}
2.读取文本的格式(id|name|age三个“属性”值,使用 |分割):
user.txt
1 | Tom | 10
2 |jerry| 11
3.创建配置文件 user.property,内容如下(key 为类名 User ,值为 User的属性):
User=id,name,age
4.利用Javabeanapi 操纵 User 对象, 并将文本内容封装成对象或对象集合
importjava.beans.PropertyDescriptor;
importjava.beans.PropertyEditor;
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.lang.reflect.Method;
importjava.math.BigDecimal;
importjava.math.BigInteger;
importjava.util.ArrayList;
importjava.util.Arrays;
importjava.util.Date;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
importjava.util.Properties;
importcn.gov.cbrc.complaint.editors.CharacterEditor;
importcn.gov.cbrc.complaint.editors.CustomBooleanEditor;
importcn.gov.cbrc.complaint.editors.CustomNumberEditor;
importcn.gov.cbrc.complaint.editors.CustomDateEditor;
importcn.gov.cbrc.complaint.editors.CustomStringEditor;
public class ObjUtils {
/**属性编辑器*/
private static Map<Class<?>,PropertyEditor> defaultEditors ;
static{
defaultEditors=new HashMap<Class<?>, PropertyEditor>();
defaultEditors.put(String.class,new CustomStringEditor());
defaultEditors.put(int.class,new CustomNumberEditor(Integer.class,true));
defaultEditors.put(Integer.class,new CustomNumberEditor(Integer.class,true));
}
/**
* 读取文件并组装对象
* @param clazz 要封装的目标对象类型
* @param propertiesPath存放对象属性名的properties文件
* @param propKey存放对象属性名的properties文件的键
* @param dataFilePath数据文件路径
* @return
*/
public static <T> List<T>convertDataFileToObj(Class<T> clazz,String propertiesPath ,StringpropKey,String dataFilePath){
List<List<String>> values=readFileByLines(dataFilePath);
List<String> propNames=getPropNames(propertiesPath,propKey);
returnassembleEntity(clazz, propNames,values) ;
}
/**
* 组装对象
* @param clazz要封装的目标对象类型
* @param propertyNames目标对象的属性名字集合
* @param values将要赋给对象的属性值
* @return
*/
private static <T> List<T>assembleEntity(Class<T> clazz,List<String> propertyNames,List<List<String>> values){
T entity=null;
try {
entity = clazz.newInstance();
} catch (Exception e1) {
e1.printStackTrace();
}
List<T> entities = new ArrayList<T>();
for(List<String> rowValues : values){
for(int i=0;i<rowValues.size();i++){
PropertyDescriptor pd = null;
try {
pd = new PropertyDescriptor(propertyNames.get(i),clazz);
Method m =pd.getWriteMethod();
PropertyEditor pe=defaultEditors.get(pd.getPropertyType());
pe.setAsText(rowValues.get(i));
m.invoke(entity,pe.getValue());
} catch (Exception e) {
e.printStackTrace();
}
}
entities.add(entity);
try {
entity=clazz.newInstance();
} catch (Exception e){
e.printStackTrace();
}
}
return entities;
}
/**
* 以行为单位读取文件
*/
public static List<List<String>> readFileByLines(String filePath) {
File file = new File(filePath);
FileInputStream fis =null;
InputStreamReader isr = null;
BufferedReader reader = null;
List<List<String>> values=new ArrayList<List<String>>();
try {
fis= new FileInputStream(file);
isr=new InputStreamReader(fis,"utf-8");//指定以UTF-8编码读入
System.out.println("以行为单位读取文件内容,一次读一整行:");
reader = new BufferedReader(isr);
String tempString = null;
List<String> strs=null;
// 一次读入一行,直到读入null为文件结束
while ((tempString = reader.readLine()) !=null) {
strs=Arrays.asList(tempString.split("\\|"));
values.add(strs);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader !=null) {
try {
reader.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
return values;
}
//读取user.property 文件中所配置的属性名
public static List<String> getPropNames(StringpropertiesPath,String key){
Properties pro = new Properties();
List<String> propNames=null;
InputStream in=null;
try {
in = Thread.currentThread().getContextClassLoader().getResourceAsStream(propertiesPath);
pro.load(in);
propNames = Arrays.asList(pro.getProperty(key).split(","));
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return propNames;
}
}
5.自定义属性编辑器写法:CustomStringEditor 用于将字符串转换成各种数据类型
importjava.beans.PropertyEditorSupport;
public class CustomStringEditor extends PropertyEditorSupport {
public void setAsText(String text) throws IllegalArgumentException {
super.setValue(text);
}
}
- 利用javabean技术封装对象
- 利用反射技术将查询结果封装为对象
- 利用Java反射快速封装JavaBean属性
- JAVABEAN的封装--回调技术
- SQL查询数据封装JavaBean对象
- XMLHTTP对象封装技术
- JAVABean利用反射 转换为JSON对象
- 利用Map中封装数据到javabean中
- JDBC_利用Java反射技术将查询结果封装为对象
- JDBC之利用反射技术将查询结果封装为对象
- 使用dom4j解析xml文件,并封装为javabean对象
- 使用dom4j解析xml文件,并封装为javabean对象
- javabean技术
- JavaBean技术
- JavaBean技术
- JavaBean技术
- JavaBean技术
- JavaBean技术
- SolrCloud分布式检索时忽略宕机的Shard
- leetcode刷题日记——Remove Duplicates from Sorted Array
- HDU5170PM2.5
- Android.mk的用法和基础
- 【Cocos2d-x】之随机数的产生
- 利用javabean技术封装对象
- 编写 android.mk 中 LOCAL_C_INCLUDES 的技巧
- nginx做负载均衡配置
- NSSearchPathForDirectoriesInDomains用法
- 非阻塞模式开发
- *LeetCode Search Insert Position -- lower_bound
- Android编译系统参考手册
- 在远程服务器ubuntu14.04上 安装erlang 17.5
- mysql分页原理和高效率的mysql分页查询语句