第一种方法是使用java.io和java.util包,缺点是路径的概念要清晰,
例子: Properties prop = new Properties();
InputStream in =
getClass().getResourceAsStream("/common.properties");
try {
prop.load(in);
pool = new JedisPool(config, prop.getProperty("pay.redis.url"));
} catch (IOException e) {
log.info("CachePool method load property error");
e.printStackTrace();
}
第二种方法是使用Apache Commons Configuration读取配置信息,优点是能读取各种配置文件信息、统一配置、自动重载等 (注意,该例子中用了/ 绝对路径,SpringJUnit4ClassRunner 做测试时,会提示找不到文件,去掉/后解决,可能因为加载配置文件的方式不同)
例子
PropertiesConfiguration redisConfig = null;
try {
redisConfig = new PropertiesConfiguration("config.properties");
} catch (ConfigurationException e) {
e.printStackTrace();
} String url = redisConfig.getString("pay.redis.url");
路径寻找顺序为:
当前路径
用户主目录路径(如果是jar包,默认对应jar包根目录)
classpath (默认对应WEB-INF/classes)
路径链接全文:
ClassLoader 提供了两个方法用于从装载的类路径中取得资源:
public URL getResource (String name);
public InputStream getResourceAsStream (String name);
这里name是资源的类路径,它是相对与“/”根路径下的位置。getResource得到的是一个URL对象来定位资源,而getResourceAsStream取得该资源输入流的引用保证程序可以从正确的位置抽取数据。
但是真正使用的不是ClassLoader的这两个方法,而是Class的 getResource和getResourceAsStream方法,因为Class对象可以从你的类得到(如YourClass.class或 YourClass.getClass()),而ClassLoader则需要再调用一YourClass.getClassLoader()方法,不过根据JDK文档的说法,Class对象的这两个方法其实是“委托”(delegate)给装载它的ClassLoader来做的,所以只需要使用 Class对象的这两个方法就可以了。
因此,直接调用 this.getClass().getResourceAsStream(String name) ;获流, 静态化方法中则使用ClassLoader.getSystemResourceAsStream (String name) 。
下面是一些得到classpath和当前类的绝对路径的一些方法。你可能需要使用其中的一些方法来得到你需要的资源的绝对路径
1.this.getClass().getResource("") 得到的是当前类class文件的URI目录。不包括自己! 如:file:/D:/workspace/jbpmtest3/bin/com/test/
2.this.getClass().getResource("/") 得到的是当前的classpath的绝对URI路径 。 如:file:/D:/workspace/jbpmtest3/bin/
3.this.getClass() .getClassLoader().getResource("") 得到的也是当前ClassPath的绝对URI路径 。如:file:/D:/workspace/jbpmtest3/bin/
4.ClassLoader.getSystemResource("") 得到的也是当前ClassPath的绝对URI路径 。 如:file:/D:/workspace/jbpmtest3/bin/
5.Thread.currentThread().getContextClassLoader ().getResource("") 得到的也是当前ClassPath的绝对URI路径 。 如:file:/D:/workspace/jbpmtest3/bin/
6.ServletActionContext.getServletContext().getRealPath(“/”)
Web应用程序 中,得到Web应用程序的根目录的绝对路径。这样,我们只需要提供相对于Web应用程序根目录的路径,就可以构建出定位资源的绝对路径。 如:file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/WebProject
注意点:
1.尽量不要使用相对于System.getProperty("user.dir")当前用户目录的相对路径。
2.尽量使用URI形式的绝对路径资源。它可以很容易的转变为URI,URL,File对象。
3.尽量使用相对classpath的相对路径。不要使用绝对路径。使用上面ClassLoaderUtil类的public static URL getExtendResource(String relativePath)方法已经能够使用相对于classpath的相对路径定位所有位置的资源。
4.绝对不要使用硬编码的绝对路径。因为,我们完全可以使用ClassLoader类的getResource("")方法得到当前classpath的绝对路径。如果你一定要指定一个绝对路径,那么使用配置文件,也比硬编码要好得多!
获得CLASSPATH之外路径的方法:
URL base = this.getClass().getResource(""); //先获得本类的所在位置,如/home/popeye/testjava/build/classes/net/
String path = new File(base.getFile(), "……/……/……/"+name).getCanonicalPath(); //就可以得到/home/popeye/testjava/name
另外,如果从ANT启动程序,this.getClass().getResource("")取出来的比较怪,直接用JAVA命令行调试就可成功。
技术分享:www.kaige123.com
相关推荐
JavaWeb应用程序中,读取配置文件是常见的任务,通常用于获取数据库连接信息、系统设置等。以下是四种在JavaWeb环境中读取配置文件的方法: 1. **使用ServletContext读取** ServletContext是JavaWeb应用程序中的一...
### JavaWeb中Ehcache缓存配置详解 在JavaWeb应用开发中,缓存技术扮演着至关重要的角色,它能够显著提升应用性能和响应速度,减少数据库负担。Ehcache作为一款广泛使用的开源缓存解决方案,其高效、灵活的特性受到...
在Java Web开发中,有时我们需要从应用程序的`classes`目录或者对应的`WEB-INF/classes`目录中读取资源文件,例如配置文件、静态内容或者数据库连接字符串等。这通常发生在我们想要在运行时加载非代码的资源,而这些...
在学生信息管理系统中,JDBC用于与数据库建立连接,执行CRUD操作(创建、读取、更新和删除学生信息)。 4. **MVC(Model-View-Controller)设计模式**:这是一种常用的软件设计模式,用于分离应用程序的业务逻辑、...
总的来说,Java Spring实现中英文切换主要包括创建并配置资源文件,设置`MessageSource`,创建并注册`LocaleChangeInterceptor`,以及在Controller中处理用户语言选择的请求。通过这些步骤,我们可以构建一个灵活且...
在JavaWeb开发中,表格的导入导出是一项常见的功能需求,尤其在数据处理、报表生成以及数据交换等场景中。本教程将详细讲解如何利用Java技术实现Excel数据的读取和写入,以便与数据库进行交互。 首先,我们需要了解...
### javaweb项目虚拟目录配置知识点详解 #### 一、虚拟目录的概念与作用 在Java Web开发中,经常需要配置虚拟目录来简化URL路径或实现更灵活的应用部署方式。虚拟目录(Virtual Directory)指的是在Web服务器中...
在JavaWeb应用中,处理Excel文件的上传与下载是一项常见的需求。这主要涉及到客户端与服务器之间的数据交互,以及对Excel文件的读写操作。这里,我们重点探讨如何使用Java技术来实现这一功能。 首先,Excel文件的...
下面我们将深入探讨JavaWeb项目实训中的关键知识点。 首先,MySQL数据库是JavaWeb应用中存储数据的核心工具。你需要了解SQL语句,包括CRUD(创建、读取、更新和删除)操作,以及如何设计数据库表结构。在实训中,你...
9. **Tomcat服务器**:多数JavaWeb项目基于Tomcat服务器运行,实例中会包含如何配置和部署应用程序。 10. **JSON与XML数据交换**:在前后端交互中,JSON和XML是常见的数据交换格式。学习如何解析和生成这两种格式的...
JavaWeb寝室信息管理系统是一款基于Struts和Hibernate框架开发的Web应用程序,主要目标是方便对学生寝室进行信息化管理。这个系统展示了如何将MVC设计模式与ORM技术相结合,来构建高效、可维护的Web应用。 首先,...
这个案例会讲解如何使用Hibernate配置数据库连接,执行CRUD(创建、读取、更新、删除)操作。我们将看到实体类的定义,Hibernate配置文件的设置,以及如何在服务层进行数据操作。 5. 安全与认证案例: Web应用的...
JavaWeb是Java技术在Web开发中的应用,涵盖了服务器端编程、网页动态呈现、数据库交互等多个方面。本课程件深入浅出地讲解了JavaWeb的基础知识,对于初学者和希望提升JavaWeb技能的开发者来说,是一份宝贵的资源。...
在本项目中,"简易的JavaWeb实现增删查改(附数据库)"是一个基于JavaWeb技术的小型应用程序,主要用于演示如何使用Java、JSP和MySQL数据库来实现基本的CRUD(创建、读取、更新和删除)操作。以下是这个项目涉及到的...
在CRM系统中,MyBatis负责与MySQL数据库进行交互,执行CRUD(创建、读取、更新、删除)操作。 7. **前端技术** 前端部分可能使用HTML、CSS和JavaScript,配合jQuery、Bootstrap等库进行页面布局和交互设计。随着...
源代码中的`web.xml`文件提供了配置示例,帮助理解Web应用的生命周期和配置方式。 通过仔细研究这些源代码,你可以深入理解JavaWeb开发的核心概念和技术,提升你的编程技能,并为实际项目开发打下坚实基础。记住,...
在Eclipse中,可以通过“动态Web项目”模板创建JavaWeb项目,然后配置Tomcat服务器,实现项目的运行。 四、图书管理功能实现 1. 添加图书:用户可以通过网页界面输入图书信息,系统通过Servlet接收请求,将数据保存...
在"javaweb sh2 教务管理系统"中,Hibernate可能被用来管理学生信息、课程信息、成绩等各种教务数据。 除了核心的Struts2和Hibernate之外,一个完整的JavaWeb应用还需要其他组件,如Servlet和JSP,它们用于处理HTTP...
源码可能涉及如何存储和读取用户信息,以及会话超时和安全性的处理。 3. MVC框架:如SpringMVC,提供更高效、灵活的开发方式。源码可能包含控制器注解、模型绑定、异常处理等功能的实现。 4. JNDI(Java Naming and ...