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 ...
随机推荐
- jsf标签,jsp标签与jstl标签
JSF通过定制标签与JSP集成.之前展示过的所有 JSF标签,<h:inputText>.<h:outputText>.<h:form> 和<f:view&g ...
- maven 打包源文件
1.The source plugin can be used to create a jar file of the project sources from the command line or ...
- Qt串口通信
1. Qt串口通信类QSerialPort 在Qt5的的更新中,新增了串口通信的相关接口类QSerialPort,这使得在开发者在使用Qt进行UI开发时,可以更加简单有效地实现串口通信的相关功能. 开 ...
- 理解SQL SERVER中的分区表(转)
简介 分区表是在SQL SERVER2005之后的版本引入的特性.这个特性允许把逻辑上的一个表在物理上分为很多部分.而对于SQL SERVER2005之前版本,所谓的分区表仅仅是分布式视图,也就是多个 ...
- respondsToSelector的使用
- (BOOL)respondsToSelector:(SEL)aSelector; 用来判断是否有以某个名字命名的方法 +(BOOL) instancesRespondToSelector: sel ...
- web-打印
项目前景 由于之前的打印是客户端程序,也就是winform做的,现在需要改版成网页版,其他功能都能够很好的实现,就是在打印上遇到一些难点.由于第一次做打印功能,刚开始照搬winform中调用word文 ...
- SQL Server类型与C#类型对应关系
SQL类型 C#类型 bit bool tinyint byte smallint short int int bigint long real float float double money de ...
- C#基本数据类型与C++区别
与C++不同的地方: char占两个字节存Unicode字符, long long 改为 long ; unsize ... 改为 u... 新增: byte占1个字节,类似与C++char, sby ...
- C++中的cout输出机制
代码: #include <iostream> using namespace std; int hello(){ cout<<"hello"<< ...
- canvas-js贝塞尔曲代码在线生成工具
canvas贝塞尔曲代码在线生成工具 可以快速生成二次.三次贝塞尔曲线的源码生成器,方便经常使用到canvas画图的同学使用,可以直接预览效果随意画出自己想要的图像. 生成源码效果预览: canvas ...