`

java读取classpath文件

    博客分类:
  • JAVA
 
阅读更多

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

分享到:
评论

相关推荐

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

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

    关于classpath

    关于java的classpath补充,详细说明如何配置classpath,如火热让javac正确编译运行java文件

    java 读取csv文件

    java 语言读取csv文件,避免导入Excel时出现的单元格取值的问题

    Java读取本地json文件及相应处理方法

    今天小编就为大家分享一篇Java读取本地json文件及相应处理方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    Java中的classpath

    不清楚classpath不会知道java如何定位你的类文件。  CLASSPATH是一个环境变量,使Java定位用户定义的类。在Windows中,可以在系统属性->高级->环境变量中设置它。  Windows可以输入 echo %CLASSPATH%查看设置...

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

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

    Java 读取类路径下的资源文件实现代码

    主要介绍了Java 读取类路径下的资源文件实现代码的相关资料,主要实现工具类代码ResourceLoadUtil.java的实例需要的朋友可以参考下

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

    传入JavaFileObject的java文件,是个集合,创建JavaSourceObject实现这个接口,Kind.SOURCE.extension = '.java' * 7.创建任务并执行 * 8.获取执行完成后的返回JavaClassObject类 * 9.创建DynamicClassLoader来...

    java jdk8 学习笔记

    同样,使用命令行指定classpath的方式优先于从系统读取classpath环境变量。 7.jar文档(java archive)采用的是zip格式压缩。 8. 也就是说执行javac命令时会执行到java命令。javac需要某个路径来编译当前文件,...

    125集专攻JAVA基础 JAVA零基础入门学习视频教程 动力节点JAVA视频教程.txt

    北京动力节点-Java编程零基础教程-056-Java基本语法-获取当前系统的字符编码.avi 北京动力节点-Java编程零基础教程-057-Java基本语法-数据类型-整型.avi 北京动力节点-Java编程零基础教程-058-Java基本语法-数据...

    java环境变量jdk1.8设置

    java环境变量设置,环境变量是操作系统提供的一种机制,用于存储和获取关键信息以方便应用程序和用户。在Java开发中,我们经常需要配置一些环境变量来指定Java运行时的一些参数。 JAVA_HOME:Java安装目录,用于指定Java...

    maven打包后,读取类路径下的配置文件

    maven打包后,读取类路径下的配置文件,pom.xml配置,利用该配置可以成功读取类路径下相应的文件

    自己动手写Java虚拟机 张秀宏 著

    1.2 java命令 1.3 编写命令行工具 1.4 测试本章代码 1.5 本章小结 第2章 搜索class文件 2.1 类路径 2.2 准备工作 2.3 实现类路径 2.3.1 Entry接口 2.3.2 DirEntry 2.3.3 ZipEntry 3 2.3.4 ...

    加载文件资源的三种方式

    加载文件资源的三种方式 ~1.从classpath根目录下加载指定名称的文件 2.从classpath根目录下加载指定名称的文件 3. 从classpath根目录下加载指定名称的文件 4. 获取当前文件的绝对路径

    java根据卡号识别银行

    里面包括一个资源类和一个测试类,需要将银行信息放在classpath下,测试加载spring的配置文件更改成自己的即可运行

    Java Instrumentation Framework.rar

    反射提供的功能,能在运行时(动态)的 ...Instrumentation是Java提供的一个来自JVM的接口,该接口提供了一系列查看和操作Java类定义的方法,例如修改类的字节码、向classLoader的classpath下加入jar文件等。

    JFinal(JAVA 极速WEB ORM框架 ) v3.2.zip

    3、添加ClassPathSource支持从class path及jar包读取模板文件 4、模板引擎添加extension method功能 5、ActiveRecordPlugin支持自动类型转换 6、添加 IDbProFactory,支持继承 DbPro 来定制 DbPro 功能 7、文件...

    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讲义

    学生提问:当我们使用编译C程序时,不仅需要指定存放目标文件的位置,也需要指定目标文件的文件名,这里使用javac编译Java程序时怎么不需要指定目标文件的文件名呢? 13 1.5.3 运行Java程序 14 1.5.4 根据...

Global site tag (gtag.js) - Google Analytics