简单案例
- 案例目标
将txt文件内容转为Student类对象 - 文件名
student.txt
- 文件内容
className=com.a.Student
name=李四
age=22
gender=false
javaScore=100
webScore=59
dbScore=59
- 步骤
- 创建缓冲字符输入流处理文件
- 读取文件数据
- 获取Class对象,加载指定类
- 创建对应类对象
- 读取文件
- 关闭资源
- 代码
public static void main(String[] args)
throws IOException, ClassNotFoundException, InstantiationException,
IllegalAccessException, IllegalArgumentException, InvocationTargetException,
NoSuchMethodException, SecurityException, NoSuchFieldException {
// 1. 创建缓冲字符输入流
BufferedReader br = new BufferedReader(new FileReader("./data/student.txt"));
// 2. 读取文件数据
String classInfo = br.readLine();
String className = classInfo.substring(classInfo.indexOf("=") + 1);
// 3. 获取Class对象,加载指定类
Class cls = Class.forName(className);
// 4. 创建对应类对象
Object obj = cls.getConstructor().newInstance();
// 5. 读取文件,利用循环读取
String info = null;
Object value = null;
// 每一次从文件中读取一行数据
while ((info = br.readLine()) != null) {
// 按照 = 分割信息
String[] split = info.split("=");
System.out.println(Arrays.toString(split));
// 根据信息获取对应成员变量对象
Field field = cls.getDeclaredField(split[0]);
field.setAccessible(true);
// 获取成员变量数据类型
Class type = field.getType();
// 当前成员变量数据为String类型
if (type.equals(String.class)) {
value = split[1];
// field.set(obj, split[1]);
// 成员变量数据类型为int类型
} else if (type.equals(int.class)) {
value = Integer.parseInt(split[1]);
// 成员变量数据类型为boolean类型
} else if (type.equals(boolean.class)) {
value = Boolean.parseBoolean(split[1]);
}
field.set(obj, value);
}
System.out.println(obj);
// 6. 关闭资源
br.close();
}
特别感谢资源支持:磊哥