`

[转]Java Resource路径小结

阅读更多
首先一点很重要,Java中不存在标准的相对路径,各种相对路径取资源的方式都是基于某种规则转化为绝对路径

然后一点也很重要,绝对不要直接使用绝对路径,否则死得很难看

基于以上两点,总结Resource路径问题无非归结为一点:找基点,也就是在某种环境下(web、j2ee或jar包等)通过合适的方式找到一个稳定的基点,然后通过这个基点找到你要的resource

Java中的基点有哪些呢?大致总结一下有以下几种:

1)classpath

如果你要找的资源在classpath下,那么通过classpath这个基点是比较合适的,而取得这个基点方式主要是通过ClassLoader来,具体方法就是 ClassLoader.getResource(String name),而取得ClassLoader的方式很多,比如:
Thread.currentThread().getContextClassLoader()
clazz.getClassLoader()
ClassLoader. getSystemClassLoader()

ClassLoader找resource的实现原理就是先递归在parent classLoader中从所在classpath里加载resource(最终如何加载JDK未开源),如果所有层级的classLoader都未找到,则调用findResource方法来找,而这个方法是暴露给自制classLoader来现实的,因此给了在classpath之外加载resource的机会。

2) 当前用户目录

就是相对于System.getProperty("user.dir" )返回的路径, 对于一般项目,这是项目的根路径。对于JavaEE服务器,这可能是服务器的某个路径。这个并没有统一的规范! 然而, 默认情况下,java.io 包中的类总是根据当前用户目录来分析相对路径名,如new File("xxx"),就是在 System.getProperty("user.dir" )路径下找xxx文件。因此,通过这种方式来定位文件可能会出现移植问题。

3) Web应用程序的根目录

在Web应用程序中,我们一般通过ServletContext.getRealPath("/" )方法得到Web应用程序的根目录的绝对路径。


掌握了上面几个基点,就能很轻松得定位你要找的resource,只不过要清晰地认识到不要只图一时快活,而不管将来移植的死活,要确保能任何环境下(j2se or web,windows or linux)不出问题。
分享到:
评论

相关推荐

    Java Resource路径整理总结

    Java Resource路径整理总结 Java Resource路径整理总结是 Java 编程语言中一个重要的知识点,主要介绍了 Java 中 Resource 路径的整理总结,旨在帮助开发者更好地理解和使用 Resource 路径。 Java Resource 路径...

    java 技巧小结荟萃

    ### Java技巧小结荟萃 #### Javadoc API 文件产生器 Javadoc 是一款非常重要的工具,主要用于生成文档,能够从源代码注释中提取出有用的文档信息。这不仅有助于提高代码的可读性,还方便其他开发人员快速理解类、...

    获取项目的相对路径和绝对路径

    ### 六、小结 通过本文的学习,我们了解到在Java Web开发中,路径的选择和使用对程序的稳定性和可维护性至关重要。正确地使用`request.getContextPath()`、`request.getServletPath()`、`request.getServletContext...

    Java中Spring获取bean方法小结

    - **通过代码注解**:Spring也支持通过注解来获取Bean,如`@Autowired`和`@Resource`,它们能够自动将依赖注入到目标字段或方法中,无需手动从ApplicationContext获取。 3. **静态Singleton Bean Manager** 通常...

    java文件的加载

    #### 四、小结 通过上述介绍可以看出,在Java中加载文件的方式多种多样,开发者可以根据实际需求选择最适合的方法。无论是基于Java本身的类加载机制还是通过Spring等框架提供的便捷方式,都能够有效地实现资源文件...

    J2EE与J2SE路径获取

    #### 小结 无论是J2EE还是J2SE项目,路径获取都是开发过程中必不可少的一部分。合理选择路径获取方法,不仅能够提高程序的可移植性和可维护性,还能够避免因路径问题导致的各种异常情况。以上介绍的方法涵盖了大...

    java,环境变量,Java环境变量配置

    ### 小结 通过上述步骤,我们不仅了解了Java环境变量的基本概念及其重要性,而且还详细介绍了如何在Windows系统中配置这些环境变量。正确配置Java环境变量对于Java开发者来说至关重要,它不仅能保证Java程序的正常...

    Spring Boot技术知识点:如何读取不同路径里的applicationContext.xml配置文件6

    ### 小结 在Spring Boot中读取不同路径下的`applicationContext.xml`配置文件,可以通过多种方式实现,包括`@ImportResource`注解、`SpringApplication.setAdditionalSources()`以及利用profiles。理解这些方法并...

    ibatis 学习小结笔记

    ### ibatis 学习小结笔记 #### 一、ibatis 概述 ibatis 是一个基于 Java 的持久层框架,它提供了一种简便的方式来处理关系型数据库与 Java 对象之间的映射(O/R Mapping)。ibatis 在设计上强调的是 SQL 语句的...

    Java软件开发实战 Java基础与案例开发详解 19-4 URL和URL Connection类 共10页.pdf

    ### 小结 本章通过理论结合实践的方式介绍了URL和URLConnection类的基础知识及其使用方法。URL类提供了获取URL各个组成部分的方法,而URLConnection类则提供了与URL建立连接并进行数据交互的能力。这些类在进行网络...

    JDBC调DB2存储过程

    ### 小结 通过以上步骤,我们不仅了解了如何使用JDBC连接DB2数据库,还学习了如何通过JDBC调用DB2中的存储过程,并处理其返回的结果集。这种技术在实际开发中非常实用,特别是在需要执行复杂操作或重复使用的逻辑时...

    Hibernate的框架的总结

    - `addResource(resourceName)`:添加额外的映射文件。 - **SessionFactory 类**:负责创建Session对象,它是线程安全的,通常一个应用只需要一个SessionFactory实例。 - `openSession()`:打开一个新的Session,...

    PHPWeb开发技术指南——pdf格式

    1.7 小结 22 第2章 高级语法 23 2.1 PHP语法 23 2.2 定义常量 24 2.3 数组函数 25 2.4 PHP和OOP 31 2.4.1 类:PHP 3.0和PHP 4.0的对比 35 2.4.2 执行类 36 2.4.3 读取对象 37 2.4.4 构造函数 38 2.4.5 继承 38 2.4.6...

    PHP4.0 高级篇

    1.7 小结 22 第2章 高级语法 23 2.1 PHP语法 23 2.2 定义常量 24 2.3 数组函数 25 2.4 PHP和OOP 31 2.4.1 类:PHP 3.0和PHP 4.0的对比 35 2.4.2 执行类 36 2.4.3 读取对象 37 2.4.4 构造函数 38 2.4.5 继承 38 2.4.6...

    自己动手写网络爬虫第1章

    #### 五、小结 通过本章的学习,读者不仅了解了网络爬虫的基本概念和工作原理,还掌握了如何使用编程语言抓取网页的基本方法。后续章节将继续深入探讨爬虫的高级功能,如动态网页处理、反爬虫策略应对等,帮助读者...

    在Spring中使用JTA事务管理

    小结 通过以上步骤,你已经在Spring中成功配置了JTA事务管理。无论是集成JOTM还是引用Tomcat内置的JTA支持,都能实现跨数据库的事务一致性。这在处理分布式系统或多数据源的应用中至关重要,因为它确保了即使在异常...

    Eclipse权威开发指南2.pdf

    1.5 本章小结...... 11 1.6 参考文献...... 12 第2章 Eclipse入门 13 2.1 第一步...... 14 2.1.1 提示没有任何JRE可用的对话框..... 14 2.1.2 创建您的第一个项目..... 15 2.1.3 Eclipse的外观:编辑器、视图和...

    Eclipse权威开发指南3.pdf

    1.5 本章小结...... 11 1.6 参考文献...... 12 第2章 Eclipse入门 13 2.1 第一步...... 14 2.1.1 提示没有任何JRE可用的对话框..... 14 2.1.2 创建您的第一个项目..... 15 2.1.3 Eclipse的外观:编辑...

Global site tag (gtag.js) - Google Analytics