`

JAVA获取CLASSPATH路径

 
阅读更多

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命令行调试就可成功。

转载自无码团队:wuma.koubei.com

分享到:
评论

相关推荐

    JAVA获取CLASSPATH路径的方法详解

    主要介绍了Java 中获取类路径 classpath 的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

    java实现获取指定路径下指定格式的所有文件

    java实现 获取指定路径下 指定格式 的所有文件

    java项目中获取路径详解

    java project和java web project项目中如何获得相对路径、绝对路径问题详解

    Java中获取类路径classpath的简单方法(推荐)

    下面小编就为大家带来一篇Java中获取类路径classpath的简单方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    基于获取JAVA路径,包括CLASSPATH外的路径的方法详解

    本篇文章是对获取JAVA路径,包括CLASSPATH外的路径的方法进行了详细的分析介绍,需要的朋友参考下

    Java路径的最终解决方案:相对路径寻址

    文中指出尽量不要使用相对于System.getProperty(\\\"user....使用上面 ClassLoaderUtil类的public static URL getExtendResource(String relativePath)方法已经能够使用相对于classpath的相对路径定位所有位置的资源。

    浅谈web项目读取classpath路径下面的文件

    主要介绍了浅谈web项目读取classpath路径下面的文件,具有一定借鉴价值,需要的朋友可以参考下

    Java动态编译Java代码,运行在内存中,并执行

    获取当前执行的classpath的所有jar包的路径 * 3.通过java的ToolProvider创建JavaCompile,用来执行class源文件 * 4.创建DiagnosticCollector用来执行获取执行失败的错误结果 * 5.添加动态执行的编译环境 options ...

    java环境变量jdk1.8设置

    CLASSPATH: Java类路径,用于指定Java类文件的搜索路径。我们可以将多个目录或JAR文件用分号;分隔指定在CLASSPATH中。 PATH: 系统环境变量,包含可执行文件的搜索路径。我们需要将JAVA_HOME/bin添加到PATH中,这样我们...

    java后台部署html页面代码.docx

    例如,使用 String classpath = StaticUtils.class.getResource("/").getPath().replaceFirst("/", "") 语句来获取类路径,然后使用 URLDecoder.decode(classpath, "utf-8") 语句来解码 URL。 异常处理 异常处理是...

    maven相关资料

    classpath:前缀是不需要的,默认就是指项目的classpath路径下面; 如果要使用绝对路径,需要加上file:前缀表示这是绝对路径; 对于FileSystemXmlApplicationContext: 默认表示的是两种: 1.没有盘符的是项目工作路径,即...

    java水晶报表 在java中实现报表

    报表开发示例中,CRConfig.xml 文件用于配置报表的基本信息,如安装路径、 CLASSPATH 等。Installer Path\Business Objects\Common\4.0\java 下的文件夹中包含了报表开发所需的jar文件。 五、报表配置 报表配置是...

    Windows Bat脚本-快速切换Java版本

    将该路径设置为JAVA_HOME环境变量,并使用setx命令使其永久生效。 显示切换结果: 显示成功切换JAVA_HOME环境变量至所选JDK版本的信息。 退出操作: 用户按任意键后退出脚本执行。 使用方法: 运行脚本时,会列出...

    allure环境安装,包含Java、Python环境所需资源解释

    1. 下载 Java 安装资源:通过分享链接获取安装资源链接,下载 Java 安装包。 2. 安装 Java:双击安装包,按照提示安装 Java,注意路径不能包含中文。 3. 配置 Java 环境变量:找到计算机的环境变量配置,新建变量名...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

    2.1.3 jvm(java)与classpath 27 2.1.4 编译程序(javac)与classpath 30 .2.2 管理原始码与位码文档 31 2.2.1 编译程序(javac)与sourcepath 31 2.2.2 使用package管理类 33 2.2.3 使用import偷懒 36 2.3 ...

    java基础教程第3版习题解答.doc

    * Java 中的路径变量可以使用 path 设置,例如 path=d:\jdk\bin,classpath=d:\jdk\jre\lib\rt.jar;.; * Java 中的 System.out.println() 方法可以输出字符串或变量的值。 编程题目 * 编程题目可以考察 Java 语言...

    ansible-javax:Ansible模块,用于执行任意java类或jar

    ansible-javax 用于以更简洁,更类似于Ansible的方式执行任意java类或jar的...要使用的Java JVM的路径。 如果未提供,将使用解析二进制路径的常规机制。 init_heap_size 设置应用程序的初始Java堆大小。 等效于-Xms'

    JAVA面试题最全集

    37.classloader中,JDK的API、Classpath中的同web-inf中的class加载方式有什么区别? 38.列举三种以上垃圾回收算法,并比较其优缺点? 39.编写代码实现一个线程池 40.描述一下JVM加载class文件的原理机制? 41....

    自动设置java环境变量

    源代码来自http://blog.163.com/scau_09se01/blog/static/1817110742011214599452 本人在其基础上进行了些许修改,添加JAVA_HOME环境变量,解决了jdk安装路径包含空格时不能正确获取信息的bug

    node_classpath_builder

    类路径生成器该节点的库有助于构建Java-Classpath。 样例代码: var classpathBuilder = require ( './classpathBuilder.js' ) ;classpathBuilder . build ( '<Directory>' , function ( classpath ) {console . log...

Global site tag (gtag.js) - Google Analytics