Java基础加强-读取配置文件和内省
Java读取配置文件
1.采用ServletContext读取,读取配置文件的realpath,然后通过文件流读取出来。
String path = "/WEB-INF/jdbc_connection.properties"; //读取WEB-INF中的配置文件
String realPath = getServletContext().getRealPath(path);//getServletContext()相当于http://localhost/demo05
//所以后面的path只需要以应用demo/开头具体的部署目录路径即可,如上面的/web-in…
/*优点*/:可以读取任意的配置文件包括xml和properties。
/*缺点*/:不能在servlet外面应用读取配置信息。
2.采用ResourceBundle类读取配置信息 /*获取指定配置文件中所以的数据*/
/*优点是*/:可以以完全限定类名的方式加载资源后,直接的读取出来,且可以在非Web应用中读取资源文件
/*缺点*/:只能加载类classes下面的资源文件且只能读取.properties文件
3.采用ClassLoader方式进行读取配置信息 /*获取的是classes的根路径下的文件*/
/*优点是*/:可以在非Web应用中读取配置资源信息,可以读取任意的资源文件信息
/*缺点*/:只能加载类classes下面的资源文件。
4.Class.getResouceAsStream
//Class.getResourceAsStream(String path)path 不以 ‘/’ 开头(相对路径)时默认是从此类所在的包下取资源,以 ‘/’ 开头则是从 ClassPath根下获取。其只是通过path构造一个
绝对路径,最终还是由ClassLoader获取资源。
//Class.getClassLoader.getResourceAsStream(String path) : 默认则是从ClassPath根下获取,path不能以 ‘/’ 开头,最终是由 ClassLoader 获取资源
//classpath 就是存放 class 文件的 地方 ,javase项目 classpath 就是bin目录,javaee项目 classpath 就是classes 目录
Class.getResource /*file:/E:/MyEclipseCode/JavaSEReview/bin/com/javaSE/config/ */
Class.getClassLoader.getResource /* file:/E:/MyEclipseCode/JavaSEReview/bin/ */
这两个getResource()是使用当前ClassLoader加载资源(即资源在 Class path中),这样资源和class直接打在jar包中,避免文件路径问题.
两者不同是Class的getResource()方法是 /*从当前.class 文件路径查找资源*/,ClassLoader则是从 /*jar包根目录查找*/.
简陋的理解是, Class.getResource查找范围更深入,有包名
Class.getClassLoader.getResource没有包名 只到bin目录下
内省(Java语言对JavaBean类属性、事件的一种缺省处理方法)
内省可以看作一种特殊的反射,只能操作javabean类的反射
简单方式实现内省
PropertyDescriptor propDesc=new PropertyDescriptor(userName,UserInfo.class)
1.创建 PropertyDescriptor 实例对象 需要的参数(操作哪个属性,操作哪个JavaBean),得到的就是一个属性对象
2.得到该属性对应的get和set方法
3.执行相应方法,传参赋值(set)或得到返回值(get)
复杂方式实现内省(Introspector类)
将JavaBean中的属性封装起来进行操作。在程序把一个类当做JavaBean来看,就是调用Introspector.getBeanInfo()方法
得到的BeanInfo对象封装了把这个类当做JavaBean看的结果信息,即属性的信息
getPropertyDescriptors(),获得所有属性的描述,遍历PropertyDescriptor[],如果某个PropertyDescriptor即属性的名字和我们需要操作的属性的name相同
操作这个PropertyDescriptor 就可以了,参考简单内省
使用BeanUtils工具包操作JavaBean
1.BeanUtils.getProperty(bean,"age"); //操作哪个bean 得到哪个属性
2.BeanUtils.setProperty(bean,"age","20"); //操作哪个bean 操作哪个属性 操作的值是多少
注:/*因为在web应用中,通常是字符串传递数据,所以这里BeanUtils帮我们做,比如这里的age属性是int类型,set 和 get都帮我们转成String再得到 或 赋值*
注:如果在一个Bean中有Date类型的属性 Date birthday = new Date(); 而Date类有一个set/getTime方法,即birthday对象有一个time属性
在BeanUtils中,可以这样操作time属性,BeanUtils.getProperty(bean,"birthday.time")
3.Bean和Map的转化
注: /*java7新特性
Map map = {name:"xzk",age:18};
BeanUtils.setProperty(map,"name","xuzekun");
*/
4.PropertyUtils
PropertyUtils 和 BeanUtils的区别 ;不会进行数据类型的转换,即age属性为int类型,BeanUtils.setProperty(bean,"age",20);,这里给的就是int
Java基础加强-读取配置文件和内省的更多相关文章
- java.util.Properties 读取配置文件中的参数
用法 getProperty方法的返回值是String类型. java.util.Properties 读取配置文件中的参数 //读取配置文件 FileInputStream inStream = n ...
- 利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换
作者:54dabang 在spring的学习过程之中,我们能够看出通过配置文件来动态管理bean对象的优点(松耦合 能够让零散部分组成一个总体,而这些总体并不在意之间彼此的细节,从而达到了真正的物理上 ...
- Java中spring读取配置文件的几种方法
Spring读取配置XML文件分三步: 一.新建一个Java Bean: package springdemo; public class HelloBean { private String hel ...
- java properties类读取配置文件
1.JAVA Properties类,在java.util包里,具体类是java.util.properties.Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值 ...
- 使用 java.util.Properties 读取配置文件中的参数
配置文件格式 如下的配置参数格式都支持: Key = ValueKey = Key:ValueKey :Value 用法 getProperty方法的返回值是String类型. //读取配置文件 Fi ...
- java 学习笔记 读取配置文件的三种方式
package com.itheima.servlet.cfg; import java.io.FileInputStream; import java.io.FileNotFoundExceptio ...
- Java.util.properties读取配置文件分析
Java.util.properties API链接: https://docs.oracle.com/javase/8/docs/api/java/util/Properties.html Clas ...
- 大数据 - Java基础:读取键盘输入的方法
Java中获取键盘输入值的三种方法 程序编写中,从键盘获取数据是一件非常普通又平常的事 C:scanf() C++:cin() C#:Read().ReadKey().ReadLine() Java没 ...
- java基础之读取文件方法大全
1.按字节读取文件内容2.按字符读取文件内容3.按行读取文件内容 4.随机读取文件内容 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如 ...
随机推荐
- ideal配置使用Git
1.git简介 git是目前流行的分布式版本管理系统.它拥有两套版本库,本地库和远程库,在不进行合并和删除之类的操作时这两套版本库互不影响.也因此其近乎所有的操作都是本地执行,所以在断网的情况下任然可 ...
- Jsoup-简单爬取知乎推荐页面(附:get_agent())
总览 今天我们就来小用一下Jsoup,从一个整体的角度来看一看爬虫 一个基本的爬虫框架包括: [x] 解析网页 [x] 失败重试 [x] 抓取内容保存至本地 [x] 多线程抓取 *** 分模块讲解 将 ...
- golang web框架 beego 学习 (六) request body和module的映射
router.go package routers import ( "gowebProject/controllers" "github.com/astaxie/bee ...
- Node express post 大小设置
body-parser 默认限制了body长度 var bodyParser = require('body-parser'); app.use(bodyParser.json({"limi ...
- redis的发布与订阅机制
Redis 发布/订阅机制原理分析 Redis 通过 PUBLISH. SUBSCRIBE 和 PSUBSCRIBE 等命令实现发布和订阅功能. 这些命令被广泛用于构建即时通信应用,比如网络聊天室(c ...
- 图解JS
弱语言 数据类型 隐式转换 弱等于 严格等于 包装对象 字符串转为包装对象 类型检测 表达式 运算符 块 try...catch 对象结构 创建对象,原型链 属性读写 getter,setter 序列 ...
- PPT 中用 LaTeX 插入公式、PowerPoint 中用 LaTeX 插入公式(4)
步骤: 1. 安装 CTex 2. 安装 IguanaTex >> 下载链接1:官网 >> 下载链接2:复制链接到迅雷或IDM下载很快 3. 将「IguanaTex_v1_56 ...
- Linux/ubuntu 心得
基本命令 有n个软件未被升级(有强迫症的,不爽的 apt-get dist-upgrade 更改主机名字 git 不要免密输入的话,可在当前工作目录执行 git config credential.h ...
- C++Primer 5th Chap3 Strings,Vectors, and Arrays
使用名字空间成员的简单方法: using namespace ::name;例如:using std::cin; 头文件不应包含using声明 标准库类型string:(需要带有头文件#include ...
- Python连接ORACLE操作
一.准备工作 1.安装cx_Oracle ttps://pypi.python.org/pypi下查找cx_Oracle并下载 执行安装命令 pip install cx_Oracle-6.0rc1- ...