Java读取properties文件

Java读取properties文件的方法比较多,网上我最多的文章是“Java读取properties文件的六种方法”,我看了好多的文章,在读到“博客之星-熔岩”的“Java读取properties文件的思考”这片文章的时候,感觉写的很好,忍不住也些点日志记录下来,在最常用的读取properties文件的方式--->“通过java.lang.Class类的getResourceAsStream(String name) 方法来实现”,

Java代码   收藏代码
  1. InputStream in = getClass().getResourceAsStream("资源Name");  

 

     这句代码有一些问题,那就是getClass()调用的时候默认省略了this!我们都知道,this是不能在static(静态)方法或者static块中使用的,原因是static类型的方法或者代码块是属于类本身的,不属于某个对象,而this本身就代表当前对象,而静态方法或者块调用的时候是不用初始化对象的。问题是:假如我不想让某个类有对象,那么我会将此类的默认构造方法设为私有,当然也不会写别的共有的构造方法。并且我这个类是工具类,都是静态的方法和变量,我要在静态块或者静态方法中获取properties文件,这个方法就行不通了。

      那怎么办呢?其实这个类就不是这么用的,他仅仅是需要获取一个Class对象就可以了,那还不容易啊--取所有类的父类Object,用Object.class难道不比你的用你正在写类自身方便安全吗 ?呵呵,下面给出一个例子,以方便交流。(注:以上的话是摘自于熔岩大哥的话),
Java代码   收藏代码
  1. import java.util.Properties;   
  2. import java.io.InputStream;   
  3. import java.io.IOException;   
  4.   
  5. /**  
  6. * 读取Properties文件的例子  
  7. * File: TestProperties.java  
  8. * User: leizhimin  
  9. * Date: 2008-2-15 18:38:40  
  10. */   
  11. public final class TestProperties {   
  12.     private static String param1;   
  13.     private static String param2;   
  14.   
  15.     static {   
  16.         Properties prop = new Properties();   
  17.         InputStream in = Object.class.getResourceAsStream("/test.properties");   
  18.         try {   
  19.             prop.load(in);   
  20.             param1 = prop.getProperty("initYears1").trim();   
  21.             param2 = prop.getProperty("initYears2").trim();   
  22.         } catch (IOException e) {   
  23.             e.printStackTrace();   
  24.         }   
  25.     }   
  26.   
  27.     /**  
  28.      * 私有构造方法,不需要创建对象  
  29.      */   
  30.     private TestProperties() {   
  31.     }   
  32.   
  33.     public static String getParam1() {   
  34.         return param1;   
  35.     }   
  36.   
  37.     public static String getParam2() {   
  38.         return param2;   
  39.     }   
  40.   
  41.     public static void main(String args[]){   
  42.         System.out.println(getParam1());   
  43.         System.out.println(getParam2());   
  44.     }   
  45. }  
 以上是他的代码,在我写的程序中
Java代码   收藏代码
  1. public static void main(String[] args) {  
  2. //InputStream inputStream = Object.class.getResourceAsStream("/ipConfig.properties");  
  3.   InputStream inputStream2 = PropertyTest.class.getResourceAsStream("/ipConfig.properties");  
  4.   InputStream inputStream3 = PropertyTest.class.getClassLoader().getResourceAsStream("ipConfig.properties");  
  5.         Properties p = new Properties();  
  6.         try {  
  7.             p.load(inputStream);  
  8.             inputStream.close();  
  9.         } catch (IOException e1) {  
  10.             e1.printStackTrace();  
  11.         }  
  12.         System.out.println("ip:" + p.getProperty("ip") + "port:"  
  13.                 + p.getProperty("port"));  
  14. }  
 对于以上的配置文件的路径名,有一个容易忽视的问题,那就是当你用Object.class.getClassLoader().get...的时候,是都可以不用要加“/”,但是不用getClassLoader().的时候是不行的,这是什么原因呢?由于这个配置文件是放在项目的src下的,在object加载的时候要加上“/”。如果是将这个配置文件拷贝到类得同包下,则不需要加,如果是用下面的方式读取配置文件:
Java代码   收藏代码
  1. private static final String BUNDLE_NAME = "com.xxx.cs.mm.service.messages";   
  2. messages.properties文件和Messages类在同一个包下,包名:com.xxx.cs.mm.service     
  3.   
  4.  private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);     
  5.   
  6. ublic static String getString(String key) {     
  7.     try {     
  8.         return RESOURCE_BUNDLE.getString(key);     
  9.      } catch (MissingResourceException e) {     
  10.           return '!' + key + '!';     
  11.       }     
  12.  }     
 则必须将配置文件放到和类文件同包下
posted @   silentmuh  阅读(1168)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
· 面试官:你是如何进行SQL调优的?
Live2D
欢迎阅读『Java读取properties文件』
  1. 1 Walk Thru Fire Vicetone
  2. 2 爱你 王心凌
  3. 3 Inspire Capo Productions - Serenity
  4. 4 Welcome Home Radical Face
  5. 5 粉红色的回忆 李玲玉
爱你 - 王心凌
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 陈思宇/谈晓珍/潘瑛

作曲 : Lee Yong Min/Hwang Se Joon

Rap词:MC HAN韩勇

RAP:

Ya boy MC HAN

我弹的钢琴都是为了你弹

弹了那么久还是觉得浪漫

我弹的时候能听到你在唱

感觉上你在这

跟我一起说话

一天到晚 我不停地想

You’re all that I think of

You’re all that I want

跟你一起总是让我特别开心

不论发生什么事我永远爱你

如果你突然打了个喷嚏 那一定就是我在想你

如果半夜被手机吵醒 啊那是因为我关心

常常想你说的话是不是别有用心

明明很想相信 却又忍不住怀疑

在你的心里 我是否就是唯一 爱就是有我常烦着你

Ho Baby 情话多说一点 想我就多看一眼

表现多一点点 让我能 真的看见

Oh Bye 少说一点 想陪你不止一天

多一点 让我 心甘情愿 爱你

喜欢在你的臂弯里胡闹 你的世界是一座城堡

在大头贴画满心号 贴在手机上对你微笑

常常想我说的话你是否听得进去

明明很想生气 却又止不住笑意

Oh Oh 在我的心里 你真的就是唯一 爱就是有我常赖着你

Ho Baby 情话多说一点 想我就多看一眼

表现多一点点 让我能 真的看见

Oh Bye 少说一点 想陪你不止一天

多一点 让我 心甘情愿 爱你

就这样 一天多一点 慢慢地累积感觉

两人的世界 就能够贴近一点

Ho Baby 情话多说一点 想我就多看一眼

表现多一点点 让我能 真的看见

Oh Bye 少说一点 想陪你不止一天

多一点 让我 心甘情愿 爱你

Ho Baby 情话多说一点 想我就多看一眼

表现多一点点 让我能 真的看见

Oh Bye 少说一点 想陪你不止一天

多一点 让我 心甘情愿 爱你

多一点 才会慢慢发现 因为你 让我心甘情愿

(OT:Nae Yae Gil Eo Bwa)

点击右上角即可分享
微信分享提示