用Thread.currentThread().getContextClassLoader().getResourceAsStream读取配置文件

Java 用的路径分为相对路径和绝对路径;

具体又分为四种:

1.URI形式的绝对资源路径

  如:file:/D:/java/eclipse/workspace/j/bin/a

  URI包括URL和URN两个类别,URL是URI的子集,所以URL一定是URI,而URI不一定是URL

  URL是URI的特例(一个标准的URL必须包括:protocol、host、port、path、parameter、anchor)

  URL的前缀/协议,必须是Java熟悉的。URL可以打开资源,而URI则不行。URL和URI对象可以互相转换,使用各自的toURI(),toURL()方法即可!

2.本地系统的绝对路径

  D:/java/eclipse/workspace/j/bin/a

  Java.io包中的类,需要使用这种形式的参数。

  但是,它们一般也提供了URI类型的参数,而URI类型的参数,接受的是URI样式的String。因此,通过URI转换,还是可以把URI样式的绝对路径用在 java.io包中的类中

3.相当于classpath的相对路径

  如:相对于

  file:/D:/java/eclipse/workspace/j/bin/这个路径的相对路径。其中,bin是本项目的classpath。所有的Java源文件编译后的.class文件复制到这个目录中

4.相当于当前用户目录的相对路径

  就是相对于System.getProperty("user.dir")返回的路径

  默认情况下,java.io 包中的类总是根据当前用户目录来分析相对路径名。此目录由系统属性 user.dir 指定,通常是 Java 虚拟机的调用目录。 这就是说,在使用

java.io包中的类时,最好不要使用相对路径。

下面是一些得到classpath和当前类的绝对路径的一些方法:

1.FileTest.class.getResource("")    得到的是当前类FileTest.class文件的URI目录。不包括自己!

如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/com/test/

2.FileTest.class.getResource("/")  得到的是当前的classpath的绝对URI路径。

如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/

3.Thread.currentThread().getContextClassLoader().getResource("")  得到的也是当前ClassPath的绝对URI路径。

如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/

4.FileTest.class.getClassLoader().getResource("")  得到的也是当前ClassPath的绝对URI路径。

如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/

5.ClassLoader.getSystemResource("")  得到的也是当前ClassPath的绝对URI路径。

如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/

推荐使用Thread.currentThread().getContextClassLoader().getResource("")来得到当前的classpath的绝对路径的URI表示法。

 

原文地址:https://www.cnblogs.com/lingxi2b2/p/12063623.html

时间: 2024-07-31 16:20:51

用Thread.currentThread().getContextClassLoader().getResourceAsStream读取配置文件的相关文章

Class.forName() 初始化、Thread.currentThread().getContextClassLoader().getResourceAsStream

Class.forName() 和 ClassLoader.loadClass()的区别? Class.forName() 和 Class.forName().NewInstance()的区别? Class.forName("xx.xx")等同于Class.forName("xx.xx",true,CALLClass.class.getClassLoader()),第二个参数(bool)表示装载类的时候是否初始化该类,即调用类的静态块的语句及初始化静态成员变量. C

Thread currentThread getContextClassLoader getResourceAs

Java路径 Java中使用的路径,分为两种:绝对路径和相对路径.具体而言,又分为四种: 一.URI形式的绝对资源路径 如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/aaa.b URL是URI的特例.URL的前缀/协议,必须是Java熟悉的.URL可以打开资源,而URI则不行. URL和URI对象可以互相转换,使用各自的toURI(),toURL()方法即可! 二.本地系统的绝对路径 D:/java/eclipse32/workspace/j

Thread.currentThread().getContextClassLoader() 和 Class.getClassLoader()区别

查了一些资料也不是太明白两个的区别,但是前者是最安全的用法 打个简单的比方,你一个WEB程序,发布到Tomcat里面运行.首先是执行Tomcat org.apache.catalina.startup.Bootstrap类,这时候的类加载器是ClassLoader.getSystemClassLoader().而我们后面的WEB程序,里面的jar.resources都是由Tomcat内部来加载的,所以你在代码中动态加载jar.资源文件的时候,首先应该是使用Thread.currentThread

java中读取配置文件

若是java web项目,项目运行于tomcat或其他容器时,可以使用下面方式来获取文件的输入流 1.当属性文件放在src下面时 InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("test.properties"); Properties p = new Properties(); p.load(is); 2.当属性文件放在某个包下面时,如:com.test.conf

Spring读取配置文件,地址问题,绝对路径,相对路径

Spring在读取配置文件时,是相对于bin,或者WEB-INF的: “applicationContext.xml”就是找bin或WEB-INF及子文件夹下的文件: “/res/applicationContext.xml”就是必须bin或WEB-INF文件夹下的res文件夹的文件://res可以换掉: 下面是找的一些关于相对路径和绝对路径的资料: 转自:http://www.cnblogs.com/mabaishui/archive/2011/03/17/1987226.html 1.基本概

搭建轻量级Jave Web框架----------读取配置文件

? 版权声明:本文为博主原创文章,转载请注明出处 目录: 1.搭建轻量级Jave Web框架----------框架说明 2.搭建轻量级Java Web框架----------读取配置文件 说明: 搭建框架的第一步就是配置文件的读取,这里使用jdk自带的Properties类读取配置文件. 为了准确获取配置文件中的各个键值对的信息,还需要一个工具类进行强制类型转换. 读取过程中还需要进行一些非空的校验等,因此还需要一个工具类对String的一些常用操作进行封装. 总结一下,需要四个java类完成

java web路径和spring读取配置文件

此篇博客缘起:部署java web系统到阿里云服务器(ubuntu14.04)的时候,有以下两个问题 找不到自定义的property配置文件 上传图片的时候找不到路径 开发的时候是在windows上的,运行正常,部署的时候就出问题了,肯定是windows和linux路径区别导致的(一个小问题来回鼓捣了几个小时,因为有自己对windows下和linux下的区别还不是特别了解,还有就是每次在windows下修改完成以后都要重新上传到阿里云,项目较大来回也需要较多时间...),遂决定好好看看java

有关getClassLoader().getResourceAsStream(fileName)、class.getResourceAsStream(fileName)和().getContextClassLoader().getResourceAsStream(fileName)的区别

一:前言 在自己获取属性时,碰见了XX.class.getResourceAsStream(fileName),自己对这个其实不是很理解,上网查了下资料,又看到了上述的几个,所以就研究了下. 二:内容 先说说着几个区别吧 getClassLoader().getResourceAsStream("a.txt"):此方法的路径不管是绝对路径还是想对路径,都是从path下找得,即使"./a.txt"的形式去寻找,在此处我们要注意空指向异常的情况(可以看看这里写的http

ClassLoader,Thread.currentThread().setContextClassLoader,tomcat的ClassLoader

实际上,在Java应用中所有程序都运行在线程里,如果在程序中没有手工设置过ClassLoader,对于一般的java类如下两种方法获得的ClassLoader通常都是同一个 this.getClass.getClassLoader(): Thread.currentThread().getContextClassLoader(): 方法一得到的Classloader是静态的,表明类的载入者是谁: 方法二得到的Classloader是动态的,谁执行(某个线程),就是那个执行者的Classloade