java框架BeanUtils及路径问题练习
内省----->一个变态的反射
BeanUtils主要解决 的问题: 把对象的属性数据封装 到对象中。 使从文件中读取的数据往对象中赋值更加简单;
BeanUtils的好处:
1. BeanUtils设置属性值的时候,如果属性是基本数据 类型,BeanUtils会自动帮我转换数据类型。
2. BeanUtils设置属性值的时候底层也是依赖于get或者Set方法设置以及获取属性值的。
3. BeanUtils设置属性值,如果设置的属性是其他的引用 类型数据,那么这时候必须要注册一个类型转换器。
代码练习:
Emp类:
package com.java.base;
import java.sql.Date;
public class Emp {
private int id;
private String name;
private double salary;
private Date birthday;
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Emp(int id, String name, double salary) {
super();
this.id = id;
this.name = name;
this.salary = salary;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public Emp(){}
@Override
public String toString() {
return "编号: " + this.id + "姓名: " + this.name + "薪水: " + this.salary + "出生日期: " + this.birthday;
}
}
BeanUtils代码:
package com.java.fram; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Constructor; import com.java.base.Emp;
import com.java.base.Person;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.Date; import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter; /*
内省----->一个变态的反射
BeanUtils主要解决 的问题: 把对象的属性数据封装 到对象中。 BeanUtils的好处:
1. BeanUtils设置属性值的时候,如果属性是基本数据 类型,BeanUtils会自动帮我转换数据类型。
2. BeanUtils设置属性值的时候底层也是依赖于get或者Set方法设置以及获取属性值的。
3. BeanUtils设置属性值,如果设置的属性是其他的引用 类型数据,那么这时候必须要注册一个类型转换器。 */ public class BeanUtilsExercise { public static void main(String[] args) throws Exception {
// writeFile();
// Person p = (Person)getInstance();
// System.out.println(p);
String id = "001";
String name = "张三";
String salary = "1000";
String birthday = "2013-12-10"; //注册一个类型转换器
ConvertUtils.register(new Converter() { @Override
public Object convert(Class type, Object value) {
Date date = null;
try{
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
date = (Date) dateFormat.parse((String)value);
}catch(Exception e){
e.printStackTrace();
}
return date;
}
}, Date.class); Emp e = new Emp();
BeanUtils.setProperty(e, "id", id);
BeanUtils.setProperty(e, "name", name);
BeanUtils.setProperty(e, "salary", salary);
BeanUtils.setProperty(e, "birthday", birthday); System.out.println(e);
} public static void writeFile() throws Exception{
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("obj.txt"));
bufferedWriter.write("com.java.base.Person");
bufferedWriter.newLine();
bufferedWriter.write("id=1");
bufferedWriter.newLine();
bufferedWriter.write("name=王五");
bufferedWriter.newLine();
bufferedWriter.write("age=25");
bufferedWriter.newLine();
bufferedWriter.close(); }
public static Object getInstance() throws Exception{
writeFile();
BufferedReader bufferedReader = new BufferedReader(new FileReader("obj.txt"));
String className = bufferedReader.readLine();
Class clazz = Class.forName(className);
Constructor constructor = clazz.getConstructor(null);//获取构造方法;
Object person = constructor.newInstance(null);
//通过构造方法获取一个实例
String line = null;
while((line = bufferedReader.readLine()) != null){
String[] datas = line.split("=");
Field field = clazz.getDeclaredField(datas[0]);
if(field.getType() == int.class){
field.set(person, Integer.parseInt(datas[1]));
}
else{
field.set(person, datas[1]);
}
}
return person; } }
路径问题:
绝对路径:一个文件的完整路径信息。一般绝对路径是包含有盘符 的。 绝对路径的缺陷: 因为绝对路径是有盘符开头的,有些系统是没有盘符的。
相对路径: 相对路径是相对于当前程序的路径。当前路径就是执行java命令的时候,控制台所在的路径。
类文件路径 :类文件路径就是使用了classpath的路径找对应的资源文件。
如果需要使用到类文件路径首先先要获取到一个Class对象。
注意使用类文件路径要配置classpath的环境变量;set classpath=E:\我的java程序\eclips\javaLearn 注意不要加分号;
代码:
package com.java.fram; import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/*
绝对路径:一个文件的完整路径信息。一般绝对路径是包含有盘符 的。 绝对路径的缺陷: 因为绝对路径是有盘符开头的,有些系统是没有盘符的。 相对路径: 相对路径是相对于当前程序的路径。当前路径就是执行java命令的时候,控制台所在的路径。 类文件路径 :类文件路径就是使用了classpath的路径找对应的资源文件。 如果需要使用到类文件路径首先先要获取到一个Class对象。
*/ public class PathExercise { static Properties properties; static{
//称为static代码块 ,也叫静态代码块,
//是在类中独立于类成员的static语句块,可以有多个,
//位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,
//如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,
//每个代码块只会被执行一次
try {
properties = new Properties(); Class clazz = PathExercise.class;
InputStream inputStream = clazz.getResourceAsStream("/db.user");
// "/"代表了Classpath的路径,getResourceAsStream使用了类文件路径
//properties.load(new FileReader("db.user"));
properties.load(inputStream);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public static void main(String[] args) {
System.out.println("当前路径: " + new File(".").getAbsolutePath());
System.out.println("用户名: " + properties.getProperty("userName") + "密码: " + properties.getProperty("passWord"));
} }
欢迎访问handsomecui的blog地址:
http://www.cnblogs.com/handsomecui/
java框架BeanUtils及路径问题练习的更多相关文章
- Java 框架、库和软件的精选列表(awesome java)
原创翻译,原始链接 本文为awesome系列中的awesome java Awesome Java Java 框架.库和软件的精选列表 项目 Bean映射 简化 bean 映射的框架 dOOv - 为 ...
- Android RIL的java框架
Android RIL的Java部分也被分为了两个模块,RIL模块与Phone模块.其中RIL模块负责进行请求以及相应的处理,它将直接与RIL的原声代码进行通信.而Phone模块则向应用程序开发者提供 ...
- WEB 项目中JAVA取得WEBROOT物理路径
http://wwwzhouhui.iteye.com/blog/504330 ———————————————————————————————————————————————————————————— ...
- 流行的9个Java框架介绍: 优点、缺点等等
流行的9个Java框架介绍: 优点.缺点等等 在 2018年,Java仍然是世界上最流行的编程语言.它拥有一个巨大的生态系统,在全世界有超过900万Java开发人员.虽然Java不是最直接的语言,但是 ...
- 云原生时代高性能Java框架—Quarkus(一)
--- Quarkus&GraalVM介绍.创建并启动第一个项目 Quarkus系列博文 Quarkus&GraalVM介绍.创建并启动第一个项目 构建Quarkus本地镜像.容器化部 ...
- 一个C#开发编写Java框架的心路历程
前言 这一篇絮絮叨叨,逻辑不太清晰的编写Java框架的的一个过程,主要描述我作为一个java初学者,在编写Java框架时的一些心得感悟. 因为我是C#的开发者,所以,在编写Java框架时,或多或少会带 ...
- 如何在Eclipse中查看JDK以及JAVA框架的源码(转载)
原文链接:http://www.cnblogs.com/outlooking/p/5243415.html 设置步骤如下: 1.点 “window”-> "Preferences&qu ...
- Java import以及Java类的搜索路径
如果你希望使用Java包中的类,就必须先使用import语句导入.import语句与C语言中的 #include 有些类似,语法为: import package1[.package2-].cl ...
- JAVA 取得当前目录的路径/Servlet/class/文件路径/web路径/url地址
在写java程序时不可避免要获取文件的路径...总结一下,遗漏的随时补上 1.可以在servlet的init方法里 String path = getServletContext().getRealP ...
随机推荐
- 一个js编写全选、弹出对话框、ajax-json的案例
js功能有:全选.弹出对话框.使用json传输ajax数据:不想在写多余的文字了,直接上代码: <%@ page language="java" contentType=&q ...
- Linux应用开发环境搭建
因为笔者是一名大学生,对Linux内核开发方向非常感兴趣,可是实在是能(ji)力(shu)有(cha)限(jin),仅仅能从Linux应用开发開始,由浅入深,逐步进步,登上人生高峰,因此,昨天搭建了开 ...
- AVR32开发环境搭建
下面是搭建AVR32开发环境的过程记录: 1.AVR32的编译环境下载 (到这里下载 as5installer-stable-5.1.208-full.exe) 如果你在安装的过程中碰到如下问题: ...
- C#基础:关键字和数据类型
[关键字] #region 和 #endregion 关键字可以折叠代码 checked 用于整型算术运算时控制当前环境中的溢出检查 unchecked 操作符用于整型算术运算时控制当前环境中的 ...
- BootStrap-validator 使用记录(JAVA SpringMVC实现)
BootStrap 是一个强大的前面框架,它用优雅的方式解决了网页问题.最近正在使用其开发网站的表单验证,一点体会记录如下: 注:本文中借鉴了博客Franson 的文章<使用bootstrapv ...
- Oracle decode函数 除数为零
decode (expression, search_1, result_1)如果 expression结果=search_1结果,则返回result_1,类似 if elsedecode (expr ...
- nginx配置时的一些问题
在配置nginx的时候出现的一些问题,在此记录: 1.如何打开nginx服务: 方法1:打开解压的下载文件,双击打开nginx.exe即可(出现闪退,我以为是出问题了,其实是服务已经启动了) 方法2: ...
- 基尔霍夫矩阵题目泛做(AD第二轮)
题目1: SPOJ 2832 题目大意: 求一个矩阵行列式模一个数P后的值.p不一定是质数. 算法讨论: 因为有除法而且p不一定是质数,不一定有逆元,所以我们用辗转相除法. #include < ...
- hdu 5671 矩阵变换
Matrix Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Su ...
- phpmyadmin开启远程服务器连接
1.修改 braries/config.default.php,将 $cfg['AllowArbitraryServer'] 的值由 false 改成 true. 2.有其他需求的也可以自己在这里修 ...