- 浏览: 514181 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (136)
- SOS经典收藏 (9)
- 好文收藏 (3)
- 技术杂烩 (6)
- SQL常用操作 (8)
- J2EE开发错误 (11)
- Java开发点滴_SSH (20)
- 数据库维护 (11)
- 网络相关 (1)
- WEB JS_CSS_DIV (10)
- 加密解密 (1)
- Swing (2)
- C&C++ (8)
- Linux (2)
- 软件工程 (5)
- Util (3)
- 我的实例 (3)
- Office办公常用 (3)
- JSP_Servlet (3)
- 开发手记 (4)
- Java基础 (3)
- Oracle技术 (6)
- 基础文档库 (9)
- 设计模式 (1)
- weblogic8.1启动的时候,项目报错,找不到Class (0)
- Office应用 (1)
- VM虚拟机技术 (1)
- PHP开发日记 (0)
最新评论
-
MoonLord:
其实不需要删文件,修改一个值就好了,参考:https://gi ...
Beyond Compare报应用程序发生错误 不能打开解决办法 -
别拿土豆不当马铃薯:
${pageContext.request.contextPath} JSP取得绝对路径 -
hysunny0923:
不需要DBUtilis.java啦学到很多~感谢分享~~
第一个JSP+Servlet+JavaBean+JDBC示例程序 -
zsxy168:
少了DBUtils.java文件
第一个JSP+Servlet+JavaBean+JDBC示例程序 -
little_demonye:
写得好详细,清楚了很多,太感谢啦
第一个JSP+Servlet+JavaBean+JDBC示例程序
大家可能经常会遇到在Java程序中存取程序配置文件的需求,比如,为了能够和不同的数据库连接,我们经常把数据库连接的信息存放到属性文件中,这些信息一般包括数据库驱动程序类名、数据库连接的URL,数据库的用户名和口令等等。为了便于程序的安装或部署,我们经常会把这些的配置文件存放到程序安装的根目录中。由于Java程序用包来分组类,有时候将这些配置文件放入到读取它们的类所在的包目录中会更好一些。比如,在下面的图示中,将数据库配置文件 database.properties放到数据库读取类所在的包目录就是一种比较清晰的存储方案:
/-----------其它包目录
|
|
-------edu.ec.database
|
|---------------ConnectionPool(数据库连接池类)
|
|---------------Dao(数据库访问对象类)
|
|---------------DaoFactory(Dao的工厂类)
|
|---------------database.properties(数据库配置属性文件)
|
|---------------RecordSet(记录集类)
在这种存储方案中,所有的与数据库相关的类和配置文件都在同一个包目录中;在开发过程中,配置文件和源文件也按采用这种方式进行组织,这样会使得程序的数据库访问维护变得相当清晰明了。
大部分开发工具在编译打包这样的源文件组织时,会自动将相关配置文件和类文件放到生成的目标文件夹中或JAR文件中。一般情况下,我们在发布自己的 Java程序时,都是以JAR或WAR形式将程序打包发布,而对应的配置文件也会按照上述的目录格式被放到了JAR或WAR文件中,这样,就实现了配置文件和程序文件打包在一起发布的目的。
现在的问题是,我们如何读取位于程序安装文件中的配置文件的信息?比如,在上面的图中, ConnectionPool是一个数据库连接池类,它需要在系统启动时自动读取存储在database.properties中的数据库连接和配置信息,以便设置相关的数据库连接。这样,我们 就需要在程序中测定目前程序安装或部署的位置,以便读取对应的属性文件。
在很多其他语言编写的程序中,我们可以利用一些系统提供的API或一些全局对象获取目前应用程序运行所在的目录。比如VB,我们可以使用Application对象测定当前程序的安装位置,在Java程序中如何完成类似的任务呢?
Java程序并没有类似于VB那种全局对象,但如果我们观察位于上述目录结构中的database.properties文件,应该发现其处于应用程序的CLASSPATH中,这样,我们就可以使用Java中的类装载器中的相关的方法,读出这些配置文件的信息,该类名为ClassLoader。比如,在上例中,我们可以先得到ConnectinPool的类装载器,然后测定ConnectionPool类所在的包路径,然后利用 ConnectionPool所在的包目录读出database.properties文件的信息,对应的伪代码如下:
ClassLoader loader=ConnectionPool.class.getClassLoader();
得到ConnectionPool所在的包名;
将包名转换为对应的目录名,存入一个名为path的字符串变量中;
调用loader的getResourceAsStream(path+"database.properties"),得到输入流
下面是一个可实际运行的样例代码片段,它可自动测定传入的类所在的包目录,返回传入的属性文件所代表的输入流。它还有一个附加的功能:如果属性文件直接放到了当前类所在的根目录(比如位于JAR文件的根目录或WAR文件的WEB-INF/classes目录中)、系统的用户目录系统、系统其他的类路径中时,它也可以找到;当然,如果还是找不到,它将返回null。具体的代码如下:
使用举例:利用上述的方法,可在ConnectionPool中自动查找和ConnectionPool处于同一个包目录中的database.properties的输入流,并利用该输入流读入对应的属性值的代码如下:
/-----------其它包目录
|
|
-------edu.ec.database
|
|---------------ConnectionPool(数据库连接池类)
|
|---------------Dao(数据库访问对象类)
|
|---------------DaoFactory(Dao的工厂类)
|
|---------------database.properties(数据库配置属性文件)
|
|---------------RecordSet(记录集类)
在这种存储方案中,所有的与数据库相关的类和配置文件都在同一个包目录中;在开发过程中,配置文件和源文件也按采用这种方式进行组织,这样会使得程序的数据库访问维护变得相当清晰明了。
大部分开发工具在编译打包这样的源文件组织时,会自动将相关配置文件和类文件放到生成的目标文件夹中或JAR文件中。一般情况下,我们在发布自己的 Java程序时,都是以JAR或WAR形式将程序打包发布,而对应的配置文件也会按照上述的目录格式被放到了JAR或WAR文件中,这样,就实现了配置文件和程序文件打包在一起发布的目的。
现在的问题是,我们如何读取位于程序安装文件中的配置文件的信息?比如,在上面的图中, ConnectionPool是一个数据库连接池类,它需要在系统启动时自动读取存储在database.properties中的数据库连接和配置信息,以便设置相关的数据库连接。这样,我们 就需要在程序中测定目前程序安装或部署的位置,以便读取对应的属性文件。
在很多其他语言编写的程序中,我们可以利用一些系统提供的API或一些全局对象获取目前应用程序运行所在的目录。比如VB,我们可以使用Application对象测定当前程序的安装位置,在Java程序中如何完成类似的任务呢?
Java程序并没有类似于VB那种全局对象,但如果我们观察位于上述目录结构中的database.properties文件,应该发现其处于应用程序的CLASSPATH中,这样,我们就可以使用Java中的类装载器中的相关的方法,读出这些配置文件的信息,该类名为ClassLoader。比如,在上例中,我们可以先得到ConnectinPool的类装载器,然后测定ConnectionPool类所在的包路径,然后利用 ConnectionPool所在的包目录读出database.properties文件的信息,对应的伪代码如下:
ClassLoader loader=ConnectionPool.class.getClassLoader();
得到ConnectionPool所在的包名;
将包名转换为对应的目录名,存入一个名为path的字符串变量中;
调用loader的getResourceAsStream(path+"database.properties"),得到输入流
下面是一个可实际运行的样例代码片段,它可自动测定传入的类所在的包目录,返回传入的属性文件所代表的输入流。它还有一个附加的功能:如果属性文件直接放到了当前类所在的根目录(比如位于JAR文件的根目录或WAR文件的WEB-INF/classes目录中)、系统的用户目录系统、系统其他的类路径中时,它也可以找到;当然,如果还是找不到,它将返回null。具体的代码如下:
public class PropHelper{ /** *guessPropFile: *@param cls:和要寻找的属性文件处于相同的包中的任意的类 *@param propFile:要寻找的属性文件名 */ public static java.io.InputStream guessPropFile(Class cls,String propFile){ try{ //得到类的类装载器 ClassLoader loader=cls.getClassLoader(); //先从当前类所处路径的根目录中寻找属性文件 java.io.InputStream in=loader.getResourceAsStream(propFile); if(in!=null) return in; //没有找到,就从该类所处的包目录中查找属性文件 Package pack=cls.getPackage(); if(pack!=null){ String packName=pack.getName(); String path=""; if(packName.indexOf(".") < 0 ) path=packName+"/"; else{ int start=0,end=0; end=packName.indexOf("."); while(end!=-1){ path=path+packName.substring(start,end)+"/"; start=end+1; end=packName.indexOf(".",start); } path=path+packName.substring(start)+"/"; } in=loader.getResourceAsStream(path+propFile); if(in!=null) return in; } //如果没有找到,再从当前系统的用户目录中进行查找 java.io.File f=null; String curDir=System.getProperty("user.dir"); f=new java.io.File(curDir,propFile); if(f.exists()) return new java.io.FileInputStream(f); //如果还是没有找到,则从系统所有的类路径中查找 String classpath=System.getProperty("java.class.path"); String[] cps=classpath.split(System.getProperty("path.separator")); for(int i=0;i < cps.length; i++){ f=new java.io.File(cps[i],propFile); if(f.exists()) break; f=null; } if(f!=null) return new java.io.FileInputStream(f); return null; }catch(Exception e){throw new RuntimeException(e);} } }
使用举例:利用上述的方法,可在ConnectionPool中自动查找和ConnectionPool处于同一个包目录中的database.properties的输入流,并利用该输入流读入对应的属性值的代码如下:
public class ConnectionPool{ //静态初始化器,将在ConnectionPools加载时自动执行 static{ java.util.Properties dbProp=new java.util.Properties(); java.io.InputStream in=PropHelper.guessPropFile(edu.ec.database.ConnectionPool.class,"database.properties"); if(in!=null) dbProp.load(in); //利用dbProp,为相应的数据源对象设置相关的属性,比如C3P0........ } }
发表评论
-
获得运行jar包存放路径的方法
2011-04-18 00:03 1381获得运行jar包存放路径 ... -
<logic:iterate>使用
2010-05-21 13:55 1598<logic:iterate> 是Logic ... -
Struts中的html:link标签使用
2010-05-21 13:23 1166Struts中的html:link标签是 ... -
第一个hibernate项目
2010-01-03 13:56 1647什么是POJO? POJO是最纯粹的Java对象,也 ... -
Struts标签-bean:write几个属性举例
2009-12-31 17:10 8509Struts标签-bean:write几个属性举例2009-0 ... -
属性配置文件的使用方法_灵活使用配置文件来配置类
2009-12-21 19:26 752属性配置文件的使用方法 我们常常使用配置文件来进行工程属性的配 ... -
Java调用Windows命令
2009-10-09 12:08 1620Java调用Windows命令 Java调用Windows ... -
Java操作Windows注册表实例
2009-10-09 11:54 1432Microsoft Windows 9x、Windows ... -
关于Java装载库文件
2009-09-21 01:33 1676System.load 和 System.loadLibrar ... -
jar文件的打包方法
2009-09-21 01:04 1397针对:双击jar文件,即可运行相关程序 首先列表一下环境: ... -
Java代码混淆器最佳推荐
2009-09-20 23:12 6585引用从事Java编程的人都知道,可以通过逆向工程反编译得到Ja ... -
Java基础知识小结
2009-07-24 11:22 1293引用小结Java学习中的一 ... -
建立规范的项目开发程序
2009-05-21 01:18 949引用规范的开发,使得项目看起来更为清晰,更为规范: 比如在开发 ... -
ApplicationResources.properties
2009-05-19 01:18 3494引用ApplicationResources.properti ... -
Properties Editor for Eclipse3[1].0-3.2安装使用
2009-05-14 00:42 9387采用Link方式安装Propertie ... -
Log4j在开发中的使用
2009-05-11 00:27 976Log4j: Log4j的使用分为 ... -
Jsp页面传值的方法
2009-04-22 11:13 11213一.通过Form表单提交传值 客户端通过Form表单提交到服 ... -
java反编译 jar jad
2009-04-21 18:11 5009引用将CLASS文件打包成JAR文件? 一:简单的打包: ... -
Eclips 使用点滴
2009-03-30 16:29 10011.)eclipse过滤jar文件 每次看到老长的竖列jar文 ...
相关推荐
在Java中,我们可以使用多种方法来读取配置文件,下面将详细介绍几种常见的方法。 1. **使用`java.io`流读取** 最基础的方式是使用Java的I/O流来读取文本配置文件(通常是.properties格式)。例如,`java.io....
在Java编程中,读取配置文件是常见的任务,特别是在构建可扩展和可维护的应用程序时。配置文件通常用于存储应用程序的设置、连接信息或其他敏感数据,这样可以将这些信息与核心代码分离,便于管理和更新。本篇文章将...
java读取properties文件的工具类,传入配置文件名字和其中的key就可以读取
### Java读写Properties配置文件详解 #### 一、引言 在Java开发中,`Properties`类被广泛用于处理各种类型的配置文件。这些文件通常包含了应用程序运行时所需的配置信息,如数据库连接信息、系统参数等。`...
在Java类中,读取配置文件信息可以使用多种方法,其中一种方法是使用`this.getClass().getClassLoader().getResourceAsStream`方法。 `this.getClass().getClassLoader().getResourceAsStream`方法是Java类中的一种...
- 考虑到频繁读写配置文件可能影响性能,可以考虑使用缓存。在内存中保存配置的副本,只有在必要时才写回文件,减少磁盘I/O。 通过以上步骤,我们可以创建一个高效、易用的配置文件管理工具,不仅能够动态修改配置...
在Java编程中,读取配置文件是常见的任务,特别是在构建可扩展和可维护的应用程序时。配置文件通常用于存储应用程序的动态设置,如数据库连接字符串、API密钥、服务器地址等,这些信息需要在运行时根据环境进行调整...
标题“java读取配置文件源代码”表明我们将讨论一个Java程序,该程序用于从`.properties`文件中加载和解析配置数据。`.properties`文件是一种简单的键值对格式,广泛用于存储Java应用程序的配置信息。 首先,我们...
在Java编程中,读取配置文件是常见的任务,特别是在构建可扩展和灵活的应用程序时。配置文件通常存储了应用程序的参数、数据库连接信息、API密钥等敏感数据,需要在运行时动态加载。本实例代码将展示如何使用`Class....
在Java编程中,读取配置文件是常见的任务,它允许我们分离程序的配置...以上就是Java中读取配置文件的基本方法和示例,希望对你有所帮助。实际项目中,还可以结合Spring框架或其他依赖注入框架,实现更灵活的配置管理。
在Android开发中,读写配置文件是常见的任务,主要用于存储应用程序的设置、用户偏好或者其他持久化数据。配置文件通常以XML或JSON格式存在,因为它们结构清晰,易于解析。本实例将详细介绍如何在Android中进行读取...
JAVA 高手解析 XML 配置文件的读取操作 本文主要讲解了 Java 中如何读取 XML 配置文件,并对 XML 解析器进行了分类,分别介绍了 DOM 和 SAX 两种解析方式的特点和使用...5. 在 Java 中读取 XML 配置文件的步骤和方法
在Java编程中,读取配置文件是常见的任务,这些配置文件可以是XML、properties或纯文本(txt)格式。配置文件通常用于存储应用程序的设置、连接信息和其他动态可配置的数据,以便于在运行时访问和修改。下面我们将...
使用 Java 读取 XML 配置文件 Java 语言和 XML 技术可以说是黄金组合,网上已经有很多文章介绍 XML 在电子商务中的数据交换的作用。但是在平时系统开发中,我们不一定都用到数据交换,是否无法使用 XML?当然不是...
在web项目中读取yml配置文件的工具类.可以实现将 server : port : portnumber : 8081 转换为 key为"server.port.portnumber",值为"8081"的Map,String>集合
`Properties`类用于处理键值对,它是Java中读取配置文件的标准方式。 要获取配置文件中的数据,我们可以调用`Singleton.INSTANCE.getProperties()`。例如,如果配置文件中有`database.url`属性,我们可以通过以下...
在Java编程中,读取配置文件是常见的任务,主要用于存储应用程序的设置或环境变量,以方便管理和维护。Java提供了一个内置的`java.util.Properties`类,用于处理`.properties`文件,这种格式通常用来存储键值对,即...