`
cuisuqiang
  • 浏览: 3956263 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
3feb66c0-2fb6-35ff-968a-5f5ec10ada43
Java研发技术指南
浏览量:3666798
社区版块
存档分类
最新评论

关于读取Src下配置文件的那个传说

    博客分类:
  • J2EE
阅读更多

关于配置文件的读取,网上资料也不少,但是针对性并不是很强。大部分也是Copy,而且方式单一,下面我来总结一下关于读取Src,即class下配置文件的方式以及区别。

首先我们来定义一个工程,建立一个Servlet,请求到后台后再转向该页面。主要看Servlet代码处理部分。然后在Src下建立一个配置文件config.properties,定义一个属性name。

 

第一种:

类加载方式,这个在网上那可是一片的解释,可是终归到底就是使用类加载器进行加载,没有其他两样!

主要代码:

try {
	Properties p = new Properties();
	// 配置文件在class下,即Src下
	p.load(TS.class.getClassLoader().getResourceAsStream("config.properties"));
	String p1 = p.getProperty("name");
	System.out.println("加载方式:" + p1);
} catch (Exception e) {
	e.printStackTrace();
}

 

类加载器的获得方式写法不一,但是我看就使用本类class就行了。获得配置文件的流进行解析。

 

第二种:

我自己成为邦定的方法,邦定一个配置文件然后直接读取属性,这个配置文件可以在任何包下面

主要代码:

try {
	// 可以加包名,例如com.config指的是com包下config.properties这个配置文件
	ResourceBundle resbun = ResourceBundle.getBundle("config");
	String p1 = resbun.getString("name");
	System.out.println("邦定方式:" + p1);
} catch (Exception e) {
	e.printStackTrace();
}

 

第三种:

在Web工程中我们都可以获得系统的request对象,这个对象可以获得请求的一些属性,也可以获得系统的一些信息,通过这个对象可以得到系统的路径信息,然后得到配置文件物理文件,再得到文件流然后解析。

但是如果使用了绝对路径,那就应该注意路径分隔符的书写方式,因为在Windows和Linux下的写法是不一样的。我们通过环境属性得到系统文件分隔符然后再进行组装。

String realpath = request.getSession().getServletContext().getRealPath("");
try {
	Properties p = new Properties();
	// 获得文件系统分隔符
	String spa = System.getProperty("file.separator");
	// 通过绝对路径获得文件然后获得流
	File file = new File(realpath + spa + "WEB-INF" + spa +"classes" + spa + "config.properties");
	FileInputStream fis = new FileInputStream(file);
	p.load(fis);
	String p1 = p.getProperty("name");
	System.out.println("本地方式:" + p1);
} catch (Exception e) {
	e.printStackTrace();
}

 

通过路径组装信息可以看到,这个方法同样可以读取在WEB-INF下定义的配置文件。

 

第四种:

我自己叫做属性方式,首先得到环境信息,然后通过系统自己加载某个配置文件。

 

try {
	Properties p = new Properties();
	ServletContext ctx = request.getSession().getServletContext();
	// 通过环境变量获得配置文件流
	p.load(ctx.getResourceAsStream("WEB-INF/classes/config.properties"));
	String p1 = p.getProperty("name");
	System.out.println("属性方式:" + p1);
} catch (Exception e) {
	e.printStackTrace();
}		
response.sendRedirect("index.jsp");
}

 

通过代码可以看到,这个方法同样可以读取WEB-INF下的文件。

 

但是以上四种方法有什么区别吗?

以我自己的看法来说,前两种方法是依赖类加载器的,而后面两个没有。而且后面两个方法可以获得WEB-INF下的配置文件,而前两种不可以。

另外最大的区别是,前两种方法读取后如果配置文件被修改,再调用进行读取的话,不能得到修改后的属性

我们可以测试,你进入index.jsp后,点击查看后台输出。然后在服务器上直接修改配置文件,再点击查看输出,发现后两种方法读取到了修改后的属性。

 

最后源码附上,请多指教!

 

请您到ITEYE看我的原创:http://cuisuqiang.iteye.com

或支持我的个人博客,地址:http://www.javacui.com

 

  • T.rar (4.9 KB)
  • 下载次数: 47
分享到:
评论
1 楼 cuisuqiang 2012-03-19  
有人想通过直接使用File对象获得文件,其实直接创建File对象这个File对象的根路径在Tomcat上因为指向的是Bin目录,而不是自己的项目根路径,这个大家应该注意!

相关推荐

    C# winform 读取修改配置文件

    本文将详细讲解如何在Winform中读取和修改配置文件,特别是`appSettings`部分,这对于大多数桌面应用来说是至关重要的功能。 配置文件在.NET Framework中通常以`.config`为扩展名,例如`app.config`或`web.config`...

    保存INI配置文件和读取配置文件

    INI 配置文件的保存和读取 INI 配置文件是一种常见的文件格式,用于存储程序的配置信息。它是一种简单的持久化机制,允许程序在启动时初始化配置信息。INI 文件由多个节(Section)组成,每个节中可以有多个键名...

    spring读取jar中的配置文件

    为了使Spring Boot能够找到JAR内的配置文件,可以在`src/main/resources`目录下创建`META-INF/spring.factories`文件,并添加以下内容: ``` org.springframework.boot.autoconfigure.EnableAutoConfiguration=...

    SpringBoot-2.7.6读取配置文件的方式

    本篇文章将详细介绍Spring Boot如何读取配置文件,以及提供一些调试示例代码,帮助你更好地理解和运用。 ### 1. 配置文件位置与优先级 Spring Boot支持多种类型的配置文件,包括`application.properties`和`...

    读取配置文件工具类.rar

    1. 加载配置文件:通过`Properties.load(InputStream)`方法加载文件,通常在类路径下查找文件。 2. 获取属性值:使用`Properties.getProperty(String key)`方法获取特定键对应的值。 3. 遍历所有属性:通过迭代`...

    封装读取配置文件

    在读取配置文件的方法中,使用了`synchronized`关键字,确保多线程环境下对`HashMap`的操作是线程安全的。这是因为配置文件的读取可能会在多线程环境中发生,如果不加控制,可能会导致数据不一致或者读取失败。 ###...

    Spring Boot多模块配置文件读取

    在Spring Boot应用中,多模块配置文件的读取是一个重要的实践,它有助于提高代码的可维护性和模块化。本文将详细探讨如何在Spring Boot的多模块项目中管理和使用不同的配置文件,以实现低耦合的设计。 首先,了解...

    java读取配置文件

    在Java编程中,读取配置文件是常见的任务,特别是在开发需要灵活配置的系统时。配置文件通常用于存储应用程序的设置,如数据库连接信息、服务器端口、第三方服务的API密钥等,这些信息可能需要根据不同的环境或需求...

    基于Qt的读取配置文件

    读取XXX.ini配置文件里面数据信息 1.在使用中把CIniFile类添加到项目当中,并在使用的类引用CIniFile类 2.m_iniFile = new CIniFile(QCoreApplication::applicationDirPath()+ MoonlightService); [MoonlightService...

    java读取WEB-INF或src目录下的properties配置文件

    大家都喜欢把配置文件放在src目录下,如果有10个以上的配置文件为什么不考虑在WEB-INF目录下新建一个文件夹,专门放配置文件;这样即好管理,文件安全性又高。亲问题已经解决,把源代码共享给大家,已经通过测试;...

    Linux shell 脚本读取配置文件

    Linux 系统 shell脚本读取配置文件

    c++读取XML配置文件

    c++读取XML配置文件C++中并没有操作XML文件的标准库,因此大家需要使用各自熟悉的XML库来解决XML文件的读取与写入。XML的一个重要用途是作为程序的配置文件,存储程序运行相关的各种数据。本文总结了使用libxml2库来...

    ubuntu系统读取ini配置文件

    本模块提供了一种在Ubuntu环境下使用C++读取INI配置文件的方法,使得开发者能方便地获取和修改配置信息。以下是关于这个功能模块的关键知识点和实现细节: 1. **INI文件格式**:INI文件是一种简单的文本格式,通常...

    LabVIEW 写入与读取配置文件

    本教程将深入探讨如何在LabVIEW中进行配置文件的写入与读取操作。 一、配置文件的类型 1. .ini 文件:这是一种文本格式的配置文件,通常包含键值对,用于存储程序的设置。例如,你可以保存用户的界面偏好、设备...

    读取xml配置文件的flash导航菜单

    在这个“读取xml配置文件的flash导航菜单”项目中,开发人员创建了一个动态的Flash菜单系统,该系统能够从外部XML文件中获取其配置信息,从而实现菜单项的动态加载和更新。下面将详细解释这个技术实现的各个方面。 ...

    用enum实现单例模式的方法来读取配置文件

    这种方法适用于读取项目根目录下的`src/main/resources`中的文件。 为了提高代码可维护性,我们可以在枚举中添加更多的方法来处理特定的配置项,比如: ```java public String getDatabaseUrl() { return ...

    C++读取配置文件

    在C++编程中,读取配置文件是一项常见的任务,它允许程序员存储和加载应用程序的设置、参数或选项,而无需每次运行时重新编译代码。本篇将详细讲解如何使用C++来实现配置文件的读取功能。 首先,配置文件通常是文本...

    python读取ini配置文件过程示范

    Python标准库中的configparser模块为开发者提供了读取和写入INI格式配置文件的能力。 在本文中,我们将详细介绍如何使用Python来读取INI配置文件。首先,我们会解释什么是INI文件以及为什么它们在配置管理中很有用...

    VC++ 读取配置文件

    在VC++编程中,有时我们需要从配置文件中读取数据,比如服务器的IP地址和端口号等信息。配置文件(通常为INI文件)是一种简单、轻量级的存储配置信息的方式,尤其适用于小型应用程序。在本例中,我们将讨论如何使用...

Global site tag (gtag.js) - Google Analytics