字符串数据
将上面的字符串数据解析并封装
Girl类
public class Girl {
private String name;
private int age;
private Date birthday;
public Girl() {
}
public Girl(String name, int age, Date birthday) {
this.name = name;
this.age = age;
this.birthday = birthday;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
age = new Date().getYear() - birthday.getYear();
}
@Override
public String toString() {
return "Girl{" +
"name='" + name + '\'' +
", age=" + age +
", birthday=" + birthday +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Girl girl = (Girl) o;
return age == girl.age && Objects.equals(name, girl.name) && Objects.equals(birthday, girl.birthday);
}
@Override
public int hashCode() {
return Objects.hash(name, age, birthday);
}
}
开始
1、读取文件内的内容
File file = new File("object.txt");
FileInputStream fileInputStream = new FileInputStream(file);
String str = null;
byte[] bytes = new byte[1024];
int len = 0;
while ((len = fileInputStream.read(bytes)) != -1){
str = new String(bytes,0,len);
}
2、用字符串的方法将读取到的内容进行处理
String split05 = null;
String split06 = null;
String split07 = null;
String split08 = null;
String[] split01 = null;
split01 = str.split("\r\n");
for (String split02 : split01) {
String[] split03 = split02.split(";");
for (String split04 : split03) {
if (split04.contains(":")){
split05 = split04.split(":")[1].split("=")[0];
split06 = split04.split(":")[1].split("=")[1];
}else {
split07 = split04.split("=")[0];
split08 = split04.split("=")[1];
try {
parse = simpleDateFormat.parse(split08);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
}
3、利用内省机制将得到的数据封装
int i = 1;
BeanInfo beanInfo = Introspector.getBeanInfo(Girl.class);
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
if (propertyDescriptor.getName().equals(split05)){
Method writeMethod = propertyDescriptor.getWriteMethod();
if (i == 1){
writeMethod.invoke(girl,split06);
}else if (i == 2){
writeMethod.invoke(girl2,split06);
}
}else if(propertyDescriptor.getName().equals(split07)){
Method writeMethod = propertyDescriptor.getWriteMethod();
if (i == 1){
writeMethod.invoke(girl,parse);
i++;
}else if (i == 2){
writeMethod.invoke(girl2,parse);
}
}
}
4、我们还需要两个实例化的Girl
Girl girl = Girl.class.newInstance();
Girl girl2 = Girl.class.newInstance();
5、在解析时需要将时间一并解析
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date parse = null;
6、效果
Girl{name='张三', age=26, birthday=Mon Jan 02 00:00:00 CST 1995}
Girl{name='李四', age=22, birthday=Mon Feb 01 00:00:00 CST 1999}
源代码
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class ParseObject {
public static void main(String[] args) throws IOException, IllegalAccessException, InstantiationException, IntrospectionException, InvocationTargetException {
File file = new File("D:\\Reflect project\\Reflect\\src\\object.txt");
FileInputStream fileInputStream = new FileInputStream(file);
String str = null;
byte[] bytes = new byte[1024];
int len = 0;
Girl girl = Girl.class.newInstance();
Girl girl2 = Girl.class.newInstance();
BeanInfo beanInfo = Introspector.getBeanInfo(Girl.class);
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date parse = null;
String split05 = null;
String split06 = null;
String split07 = null;
String split08 = null;
String[] split01 = null;
int i = 1;
while ((len = fileInputStream.read(bytes)) != -1){
str = new String(bytes,0,len);
}
split01 = str.split("\r\n");
for (String split02 : split01) {
String[] split03 = split02.split(";");
for (String split04 : split03) {
if (split04.contains(":")){
split05 = split04.split(":")[1].split("=")[0];
split06 = split04.split(":")[1].split("=")[1];
}else {
split07 = split04.split("=")[0];
split08 = split04.split("=")[1];
try {
parse = simpleDateFormat.parse(split08);
} catch (ParseException e) {
e.printStackTrace();
}
}
for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
if (propertyDescriptor.getName().equals(split05)){
Method writeMethod = propertyDescriptor.getWriteMethod();
if (i == 1){
writeMethod.invoke(girl,split06);
}else if (i == 2){
writeMethod.invoke(girl2,split06);
}
}else if(propertyDescriptor.getName().equals(split07)){
Method writeMethod = propertyDescriptor.getWriteMethod();
if (i == 1){
writeMethod.invoke(girl,parse);
i++;
}else if (i == 2){
writeMethod.invoke(girl2,parse);
}
}
}
}
}
System.out.println(girl);
System.out.println(girl2);
}
}