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

关于读取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目录,而不是自己的项目根路径,这个大家应该注意!

相关推荐

    读取src下的文件及自己包下的配置文件

    将此项目生成一个jar 就可以动态的读取src及文件包下的配置文件了。类似于strust2中的读取default.properties文件,然后,如果,我们的项目中引入了struts.properties文件了,就以struts.properties为主。

    java读取配置文件

    java读取WEB-INFO下的配置文件,读取src下的配置文件,junit读取WEB-INFO下的配置文件

    spring读取jar中的配置文件

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

    读取配置文件工具类.rar

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

    封装读取配置文件

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

    java 读取配置文件

    在Java编程中,读取配置文件是常见的任务,特别是在构建可扩展和可维护的应用程序时。配置文件通常用于存储应用程序的设置、连接信息或其他敏感数据,这样可以将这些信息与核心代码分离,便于管理和更新。本篇文章将...

    Linux shell 脚本读取配置文件

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

    spring mvc 读取配置文件

    首先,Spring MVC中的配置文件通常是指XML配置文件,如`applicationContext.xml`或`servlet-context.xml`,它们位于`src/main/resources`目录下。这些文件包含了Spring MVC应用的所有组件配置,如控制器(Controller...

    c++读取XML配置文件

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

    C# .net读取ini配置文件

    ### C# .NET读取INI配置文件的知识点详解 #### 一、概述 在软件开发过程中,经常会遇到需要根据不同的环境或用户需求调整程序配置的情况。例如,更改数据库连接字符串、FTP登录凭证等。传统的做法是在代码中硬编码...

    ubuntu系统读取ini配置文件

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

    Qt读取配置文件的源码

    在Qt框架中,读取配置文件是常见的任务,这通常涉及到对XML格式的.INI文件进行操作。本文将深入解析如何使用Qt库中的QSettings类来实现这一功能,并结合给出的源码文件来阐述相关知识。 QSettings类是Qt提供的一种...

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

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

    JAVA高手解析XML配置文件的读取操作.pdf

    JAVA 高手解析 XML 配置文件的读取操作 本文主要讲解了 Java 中如何读取 XML 配置文件,并对 XML 解析器进行了分类,分别介绍了 DOM 和 SAX 两种解析方式的特点和使用场景,并提供了一个使用 SAX 解析器读取 XML ...

    c# 通过配置文件读取数据库连接字符创,读取配置文件值

    在C#编程中,配置文件是一个非常重要的组成部分,它允许开发者在不修改代码的情况下更改应用程序的行为。本篇文章将深入探讨如何使用C#通过配置文件读取数据库连接字符串和其他配置值,以及这样做的好处。 首先,...

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

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

    c++读取配置文件

    在C++编程中,读取配置文件是一项常见的任务,它允许程序在运行时根据外部文件中的设置进行调整,而不是硬编码这些参数。本教程将详细讲解如何使用C++读取配置文件,特别是针对TXT格式的文件,因为它们简单且易于...

    C++读取配置文件

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

    VC++ 读取配置文件

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

Global site tag (gtag.js) - Google Analytics