properties文件的加载方式
下面1-4的内容是网上收集的相关知识,总结来说,就是如下几个知识点:
- 最常用读取properties文件的方法
- InputStream in = getClass().getResourceAsStream("资源Name");这种方式要求properties文件和当前类在同一文件夹下面。如果在不同的包中,必须使用:
- InputStream ins = this.getClass().getResourceAsStream("/cn/zhao/properties/testPropertiesPath2.properties");
- Java中获取路径方法
- 获取路径的一个简单实现
- 反射方式获取properties文件的三种方式
1 反射方式获取properties文件最常用方法以及思考:
Java读取properties文件的方法比较多,网上最多的文章是"Java读取properties文件的六种方法",但在Java应用中,最常用还是通过java.lang.Class类的getResourceAsStream(String name) 方法来实现,但我见到众多读取properties文件的代码中,都会这么干:
InputStream in = getClass().getResourceAsStream("资源Name");
这里面有个问题,就是getClass()调用的时候默认省略了this!我们都知道,this是不能在static(静态)方法或者static块中使用的,原因是static类型的方法或者代码块是属于类本身的,不属于某个对象,而this本身就代表当前对象,而静态方法或者块调用的时候是不用初始化对象的。
问题是:假如我不想让某个类有对象,那么我会将此类的默认构造方法设为私有,当然也不会写别的共有的构造方法。并且我这个类是工具类,都是静态的方法和变量,我要在静态块或者静态方法中获取properties文件,这个方法就行不通了。
那怎么办呢?其实这个类就不是这么用的,他仅仅是需要获取一个Class对象就可以了,那还不容易啊--
取所有类的父类Object,用Object.class难道不比你的用你正在写类自身方便安全吗 ?呵呵,下面给出一个例子,以方便交流。
- import java.util.Properties;
- import java.io.InputStream;
- import java.io.IOException;
- /**
- * 读取Properties文件的例子
- * File: TestProperties.java
- * User: leizhimin
- * Date: 2008-2-15 18:38:40
- */
- public final class TestProperties {
- private static String param1;
- private static String param2;
- static {
- Properties prop = new Properties();
- InputStream in = Object. class .getResourceAsStream( "/test.properties" );
- try {
- prop.load(in);
- param1 = prop.getProperty( "initYears1" ).trim();
- param2 = prop.getProperty( "initYears2" ).trim();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- /**
- * 私有构造方法,不需要创建对象
- */
- private TestProperties() {
- }
- public static String getParam1() {
- return param1;
- }
- public static String getParam2() {
- return param2;
- }
- public static void main(String args[]){
- System.out.println(getParam1());
- System.out.println(getParam2());
- }
- }
- 运行结果:
- 151
- 152
当然,把Object.class换成int.class照样行,呵呵,大家可以试试。
另外,如果是static方法或块中读取Properties文件,还有一种最保险的方法,就是这个类的本身名字来直接获取Class对象,比如本例中可写成TestProperties.class,这样做是最保险的方法
2 获取路径的方式:
- File fileB = new File( this .getClass().getResource( "" ).getPath());
- System. out .println( "fileB path: " + fileB);
2.2获取当前类所在的工程名:
- System. out .println("user.dir path: " + System. getProperty ("user.dir"))<span style="background-color: white;">3 获取路径的一个简单的Java实现</span>
- /**
- *获取项目的相对路径下文件的绝对路径
- *
- * @param parentDir
- *目标文件的父目录,例如说,工程的目录下,有lib与bin和conf目录,那么程序运行于lib or
- * bin,那么需要的配置文件却是conf里面,则需要找到该配置文件的绝对路径
- * @param fileName
- *文件名
- * @return一个绝对路径
- */
- public static String getPath(String parentDir, String fileName) {
- String path = null;
- String userdir = System.getProperty("user.dir");
- String userdirName = new File(userdir).getName();
- if (userdirName.equalsIgnoreCase("lib")
- || userdirName.equalsIgnoreCase("bin")) {
- File newf = new File(userdir);
- File newp = new File(newf.getParent());
- if (fileName.trim().equals("")) {
- path = newp.getPath() + File.separator + parentDir;
- } else {
- path = newp.getPath() + File.separator + parentDir
- + File.separator + fileName;
- }
- } else {
- if (fileName.trim().equals("")) {
- path = userdir + File.separator + parentDir;
- } else {
- path = userdir + File.separator + parentDir + File.separator
- + fileName;
- }
- }
- return path;
- }
4 利用反射的方式获取路径:
- InputStream ips1 = Enumeration . class .getClassLoader() .getResourceAsStream( "cn/zhao/enumStudy/testPropertiesPath1.properties" );
- InputStream ips2 = Enumeration . class .getResourceAsStream( "testPropertiesPath1.properties" );
- InputStream ips3 = Enumeration . class .getResourceAsStream( "properties/testPropertiesPath2.properties" );
properties文件的加载方式的更多相关文章
- 【Spring MVC】Properties文件的加载
[Spring MVC]Properties文件的加载 转载:https://www.cnblogs.com/yangchongxing/p/10726885.html 参考:https://java ...
- 3.Properties文件的加载和使用
一.Properties简介 Properties 类继承自HashTable,提供的方法很像Map的实现类HashMap.它在 Java 编程的早期就有了,并且几乎没有什么变化.J2SE 的 Tig ...
- Java读取Properties文件 Java加载配置Properties文件
static{ Properties prop = new Properties(); prop.load(Thread.currentThread().getContextClassLoader() ...
- Spring中 <context:property-placeholder 的使用与解析 .properties 配置文件的加载
转: Spring中property-placeholder的使用与解析 Spring中property-placeholder的使用与解析 我们在基于spring开发应用的时候,一般都会将数据库的配 ...
- 【第二篇】xLua中lua加载方式
xLua中lua文件加载方式 1. 直接执行字符串方式 LuaEnv luaenv = new LuaEnv(); luaenv.DoString("CS.UnityEngine.Debu ...
- SpringMVC加载配置Properties文件的几种方式
最近开发的项目使用了SpringMVC的框架,用下来感觉SpringMVC的代码实现的非常优雅,功能也非常强大, 网上介绍Controller参数绑定.URL映射的文章都很多了,写这篇博客主要总结一下 ...
- Java中的资源文件加载方式
文件加载方式有两种: 使用文件系统自带的路径机制,一个应用程序只能有一个当前目录,但可以有Path变量来访问多个目录 使用ClassPath路径机制,类路径跟Path全局变量一样也是有多个值 在Jav ...
- BMP图片的加载方式:资源 VS 文件
在程序中加载位图有很多方法,各有各的好处.这里简单说一下在资源里和文件里加载的区别. 第一.在资源里加载位图 这种方法就是在工程里的“资源视图”-->“添加资源”-->"Bitm ...
- log4j配置文件加载方式
使用背景: apache的log4j是一个功能强大的日志文件,当我们使用eclipse等IDE在项目中配置log4j的时候,需要知道我们的配置文件的加载方式以及如何被加载的. 加载方式: (1).自动 ...
随机推荐
- python学习-输入输出
Python的输入和输出非常方便,下面详细记录一下 任何计算机程序都是为了执行一个特定的任务,有了输入,用户才能告诉计算机程序所需的信息,有了输出,程序运行后才能告诉用户任务的结果.输入是Input, ...
- Java语言基础(2)
1 包的概念 把一个项目分割成几个模块,为每一个模块建立包,把该模块的.java文件统一放到对应包,通过包更好的管理.java文件,并且更好的分工合作.可以尽量避免出现.java文件重名现象. 包命名 ...
- STL源码阅读-traits与迭代器
迭代器模式 提供一种方法,使之能够依序访问容器的各个元素,而又无需暴露容器的内部表述方式 STL设计的中心思想在于将数据容器和算法分离开,容器和算法分开设计,迭代器则是两者之间的胶着剂,一般迭代器的设 ...
- 向MySQL数据库插入数据出现乱码的情况分析
(1)第一种情况在新建数据库时 (2)第二种情况就是,IDE环境里面配置编码设置为UTF-8 (3)第三种情况就是连接数据库时,没有设置编码.这个是最常规的.这个看起来很容易解决,但是需要注意MySQ ...
- Java8中重要的收集器Collector
Collector介绍 Java8的stream api能很方便我们对数据进行统计分类等工作,函数式编程的风格让我们方便并且直观地编写统计代码. 例如: Stream<Integer> s ...
- html访问全过程
1)解析Web页面的URL,得到Web服务器的域名 2)通过DNS服务器获得Web服务器的IP地址 3)与Web服务器建立TCP连接 4)与Web服务器建立HTTP连接 5)从Web服务器获得URL指 ...
- Harbor ($docker login) Error saving credentials
$ sudo apt-get install $ sudo apt-get install gnupg2 pass 问题解决!
- Python前端HTML
一.web标准介绍 web标准: w3c:万维网联盟组织,用来制定web标准的机构(组织) web标准:制作网页遵循的规范 web标准规范的分类:结构标准.表现标准.行为标准. 结构:html.表示: ...
- 什么是弹性盒子 ( Flex Box)?
㈠什么是弹性盒子? 弹性盒子是 CSS3 的一种新的布局模式.引入弹性盒布局模型的目的是提供一种更加有效的方式来对一个容器中的子元素进行排列.对齐和分配空白空间. 弹性盒子由弹性容器(Flex con ...
- SpringBoot2.0集成Shiro
1.shiro的三个核心概念: 1)Subject:代表当前正在执行操作的用户,但Subject代表的可以是人,也可以是任何第三方系统帐号.当然每个subject实例都会被绑定到SercurityMa ...