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基础加强-读取配置文件和内省的更多相关文章

  1. java.util.Properties 读取配置文件中的参数

    用法 getProperty方法的返回值是String类型. java.util.Properties 读取配置文件中的参数 //读取配置文件 FileInputStream inStream = n ...

  2. 利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换

    作者:54dabang 在spring的学习过程之中,我们能够看出通过配置文件来动态管理bean对象的优点(松耦合 能够让零散部分组成一个总体,而这些总体并不在意之间彼此的细节,从而达到了真正的物理上 ...

  3. Java中spring读取配置文件的几种方法

    Spring读取配置XML文件分三步: 一.新建一个Java Bean: package springdemo; public class HelloBean { private String hel ...

  4. java properties类读取配置文件

    1.JAVA Properties类,在java.util包里,具体类是java.util.properties.Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值 ...

  5. 使用 java.util.Properties 读取配置文件中的参数

    配置文件格式 如下的配置参数格式都支持: Key = ValueKey = Key:ValueKey :Value 用法 getProperty方法的返回值是String类型. //读取配置文件 Fi ...

  6. java 学习笔记 读取配置文件的三种方式

    package com.itheima.servlet.cfg; import java.io.FileInputStream; import java.io.FileNotFoundExceptio ...

  7. Java.util.properties读取配置文件分析

    Java.util.properties API链接: https://docs.oracle.com/javase/8/docs/api/java/util/Properties.html Clas ...

  8. 大数据 - Java基础:读取键盘输入的方法

    Java中获取键盘输入值的三种方法 程序编写中,从键盘获取数据是一件非常普通又平常的事 C:scanf() C++:cin() C#:Read().ReadKey().ReadLine() Java没 ...

  9. java基础之读取文件方法大全

    1.按字节读取文件内容2.按字符读取文件内容3.按行读取文件内容 4.随机读取文件内容 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如 ...

随机推荐

  1. java类什么时候加载?,加载类的原理机制是怎么样的?

    java类什么时候加载?,加载原理机制是怎么样的?   答: 很多人都不是很清楚java的class类什么时候加载在运行内存中,其实类加载的时间是发生在一下几种情况: 1.实例化对象时,就像sprin ...

  2. Django中验证码的登录

    需求概述 一般登录页面或者其他页面都需要验证码的功能,那在Django中如何实现呢? 这基本就需要用到第三方模块了:pillow 还需要两个文件,一个是字体文件:Monaco.ttf,另一个是一个模块 ...

  3. 将任意音频格式文件转换成16K采样率16bit的wav文件

    此转换需要使用ffmpeg 假设有目录 d:\录音 目录有 张三.m4a, 李四.m4a xxx.m4a(其他任意格式音频触类旁通可以把 *.m4a改成*.*).批量转换成采样率16K,有符号,16b ...

  4. droid AVD创建及设置中各参数详解

    设置AVD时有些参数比较模糊,特地找了篇文章,大家参考下! 本文根据如下的模拟器安装做一些解释: Name: 自定义虚拟的名称,不能有空格或者其他非法字符,否则不能创建,即Creat AVD不能高亮点 ...

  5. 【ARTS】01_30_左耳听风-201900603~201900609

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  6. 【c# 学习笔记】多态

    由于可以继承基类的所有成员,子类就都有了相同的行为,但是有时子类的某些行为需要相互区别,子类需要覆写父类中的方法来实现子类特有的行为,这样 的技术在面向对象的编程中就是多态. 多态即相同类型的对象调用 ...

  7. jvm minor gc 为什么比 full gc 快很多

    1.minor gc 也需要STW,只不过正常情况下 minor gc  STW时间非常短,所以很多人误以为没有STW. 这里的正常情况是,Eden 区产生的新对象大部分被回收了,不需要拷贝. 2.M ...

  8. leetCode:twoSum 两数之和 【JAVA实现】

    LeetCode 两数之和 给定一个整数数组,返回两个数字的索引,使它们相加到特定目标. 您可以假设每个输入只有一个解决方案,并且您可能不会两次使用相同的元素. 更多文章查看个人博客 个人博客地址:t ...

  9. Graphics2D画快递电子面单图片并且打印

    画图类 package com.example.testpdf; import org.krysalis.barcode4j.impl.code128.Code128Bean; import org. ...

  10. 网页为什么会乱码?浅析字符集编码ASCII和Unicode

    因为编码不对! 什么是编码?编码不对为什么会乱码? ……?? 编码转换为什么会丢失数据? ……?? 不管是数据库还是网页,都可能碰到过乱码问题 在计算机世界里,所有数据都使用二进制存储,即只有1和0, ...