不得不吐槽这帮家伙,说来说去没有一个是用心说的,对于我这渣渣来说,不说明白原里我是不会的,不罢休的。

下面这些事转载  http://blog.csdn.net/ak913/article/details/7399056

getResourceAsStream ()返回的是inputstream

getResource()返回:URL

Class.getResource("")    返回的是当前Class这个类所在包开始的为置

Class.getResource("/") 返回的是classpath的位置

getClassLoader().getResource("")  返回的是classpath的位置

getClassLoader().getResource("/")  错误的!!

======================================================================== 
Class.getResourceAsStream 和 ClassLoader.getResourceAsStream

这两个方法还是略有区别的, 以前一直不加以区分,直到今天发现要写这样的代码的时候运行错误, 才把这个问题澄清了一下。

基本上,两个都可以用于从 classpath 里面进行资源读取,  classpath包含classpath中的路径和classpath中的jar。

两个方法的区别是资源的定义不同, 一个主要用于相对与一个object取资源,而另一个用于取相对于classpath的资源,用的是绝对路径。

在使用Class.getResourceAsStream 时, 资源路径有两种方式, 一种以 / 开头,则这样的路径是指定绝对路径, 如果不以 / 开头, 则路径是相对与这个class所在的包的。

在使用ClassLoader.getResourceAsStream时, 路径直接使用相对于classpath的绝对路径。

举例,下面的三个语句,实际结果是一样的

com.explorers.Test.class.getResourceAsStream("abc.jpg") 
com.explorers.Test.class.getResourceAsStream("/com/explorers/abc.jpg") 
ClassLoader.getResourceAsStream("com/explorers/abc.jpg") 
================================================================================

平时写程序的时候,很多时候提示文件找不到,而抛出了异常,现在整理如下

一 相对路径的获得 
    说明:相对路径(即不写明时候到底相对谁)均可通过以下方式获得(不论是一般的Java项目还是web项目) 
         String relativelyPath=System.getProperty("user.dir"); 
        上述相对路径中,java项目中的文件是相对于项目的根目录 
        web项目中的文件路径视不同的web服务器不同而不同(tomcat是相对于 tomcat安装目录\bin)

二 类加载目录的获得(即当运行时某一类时获得其装载目录) 
      1)通用的方法一(不论是一般的java项目还是web项目,先定位到能看到包路径的第一级目录) 
        
        InputStream is=TestAction.class.getClassLoader().getResourceAsStream("test.txt");
        (test.txt文件的路径为 项目名\src\test.txt;类TestAction所在包的第一级目录位于src目录下) 
        
        上式中将TestAction,test.txt替换成对应成相应的类名和文件名字即可

2)通用方法二 (此方法和1中的方法类似,不同的是此方法必须以'/'开头) 
         InputStream is=Test1.class.getResourceAsStream("/test.txt"); 
         (test.txt文件的路径为 项目名\src\test.txt,类Test1所在包的第一级目录位于src目录下)

三 web项目根目录的获得(发布之后) 
    1 从servlet出发

可建立一个servlet在其的init方法中写入如下语句 
   ServletContext s1=this.getServletContext(); 
   String temp=s1.getRealPath("/"); (关键) 
    结果形如:D:\工具\Tomcat-6.0\webapps\002_ext\ (002_ext为项目名字)

如果是调用了s1.getRealPath("")则输出D:\工具\Tomcat-6.0\webapps\002_ext(少了一个"\")

2 从httpServletRequest出发

String cp11111=request.getSession().getServletContext().getRealPath("/");

结果形如:D:\工具\Tomcat-6.0\webapps\002_ext\

四 classpath的获取(在Eclipse中为获得src或者classes目录的路径)

方法一   Thread.currentThread().getContextClassLoader().getResource("").getPath()

eg: String t=Thread.currentThread().getContextClassLoader().getResource("").getPath();
          System.out.println("t---"+t);

输出:t---/E:/order/002_ext/WebRoot/WEB-INF/classes/

方法二     JdomParse.class.getClassLoader().getResource("").getPath() (JdomParse为src某一个包中的类,下同)

eg:String p1=JdomParse.class.getClassLoader().getResource("").getPath();
       System.out.println("JdomParse.class.getClassLoader().getResource--"+p1);

输出: JdomParse.class.getClassLoader().getResource--/E:/order/002_ext/WebRoot/WEB-INF/classes/

另外,如果想把文件放在某一包中,则可以 通过以下方式获得到文件(先定位到该包的最后一级目录)

eg String p2=JdomParse.class.getResource("").getPath(); 
         System.out.println("JdomParse.class.getResource---"+p2);

输出: JdomParse.class.getResource---/E:/order/002_ext/WebRoot/WEB-INF/classes/jdom/ (JdomParse为src目录下jdom包中的类)

五   属性文件的读取:

方法 一

InputStream in = lnew BufferedInputStream( new FileInputStream(name));

Properties p = new Properties();

p.load(in);

注意路径的问题,做执行之后就可以调用p.getProperty("name")得到对应属性的值

方法二

Locale locale = Locale.getDefault();  
            ResourceBundle localResource = ResourceBundle.getBundle("test/propertiesTest", locale);
            String value = localResource.getString("test"); 
            System.out.println("ResourceBundle: " + value);

工程src目录下propertiesTest.properties(名字后缀必须为properties)文件内容如下:

test=hello word

public class FileTest {public static void main(String[] args) {System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));System.out.println(FileTest.class.getClassLoader().getResource(""));System.out.println(ClassLoader.getSystemResource(""));System.out.println(FileTest.class.getResource(""));System.out.println(FileTest.class.getResource("/")); // Class文件所在路径System.out.println(new File("/").getAbsolutePath());System.out.println(System.getProperty("user.dir"));}
}

输出结果:

file:/E:/workspace/JavaStudy/bin/ 
file:/E:/workspace/JavaStudy/bin/ 
file:/E:/workspace/JavaStudy/bin/ 
file:/E:/workspace/JavaStudy/bin/test/ 
file:/E:/workspace/JavaStudy/bin/ 
E:\ 
E:\workspace\JavaStudy

太多了,我只看了几行主要的,

记住一句话就可以  Class.getResource("/") 返回的是classpath的位置      他获取的文件位置就是标红的位置文件   

如果是读取配置文件最好用fileinputStream  或者buffer,这样就不会去读缓存,修改就会直接生效

ConfigUtil.class.getResource相关推荐

  1. linux下文件操作

    以前都是window下开发,服务器也大多是window环境,加上取文件路径的问题还是比较少的,今天我的服务放到linux下跑不起来了,看了下,是文件问题.. 修改完之后如下:(问题解决) packag ...

  2. Spring mail 邮件服务及其参数配置(properties文件的读写)

    一个Web 系统通常会少不了邮件服务的,比如用于注册,密码找回,订单提醒等应用场景.Spring 封装了一个简单易用的关于邮件发送的工具类JavaMailSenderImpl . 系统要提供邮件服务, ...

  3. 关于Class.getResource和ClassLoader.getResource的路径问题

    本文转自:http://www.cnblogs.com/yejg1212/p/3270152.html Java中取资源时,经常用到Class.getResource和ClassLoader.getR ...

  4. JAVA class.getResource()的用法

    用JAVA获取文件,听似简单,但对于很多像我这样的新人来说,还是掌握颇浅,用起来感觉颇深,大常最经常用的,就是用JAVA的File类,如要取得c:/test.txt文件,就会这样用File file ...

  5. log4j用于读取.xml文件的出现了错误,类加载器.getResource(user.xml).getPath()返回路径空格变成了%20...

    最近在训练web的三层开发模式,写了一个小程序,为了模拟数据库,用了xml来进行存放数据,因此需要将xml文件装载到内存中去,代码如下 private static String fileName;s ...

  6. ConfigUtil读取配置文件

    package utils;import java.util.ResourceBundle;public class ConfigUtil {private static ResourceBundle ...

  7. getPath()和getResource()找不到文件(NullPointerException)的原因(idea创建properties文件)

    1.创建一个目录 2.让它成为Resources Root 3.创建配置文件(properties) 4.创建成功 5.getPath().getResource()找到了文件

  8. Java文件路径(getResource)

    getResourceAsStream ()返回的是inputstream getResource()返回:URL Class.getResource("")    返回的是当前C ...

  9. java中Class.getResource用法(用于配置文件的读取)

    用JAVA获取文件,听似简单,但对于很多像我这样的新人来说,还是掌握颇浅,用起来感觉颇深,大常最经常用的,就是用JAVA的File类,如要取得c:/test.txt文件,就会这样用File file ...

  10. Class.getResource()与Class.getClassLoader().getResource()解析

    我们在eclipse上写的.java文件最终会被编译成一个.class的字节码文件.而java源文件存储在src文件下,而编译后的.class字节码文件存储在bin文件下. 一. 通过Class.ge ...

最新文章

  1. 端到端训练 联合训练_曲靖两家银行举行联合军事拓展训练 献礼祖国71周年华诞...
  2. 判断浏览器是否为IE内核的最简单的方法
  3. 分布式部署携程Apollo构建配置中心
  4. python如何调用c函数实现真正意义的多线程_python如何使用多线程执行多个函数?...
  5. Python 的构建工具 setup.py
  6. bat代码雨代码流星_bat-入门系列-03-判断结构2
  7. 数据库每日一题 2020.05.21
  8. 中药和西药的历史渊源,到底谁才是科学好药
  9. 树莓派Raspberry实践笔记—显示分辨率配置
  10. 2016大学里的流年回忆
  11. UltraISO 制作U盘启动盘(Ubuntu、CentOS)
  12. 西门子g120变频器接线图_西门子变频器G120应用技术手册
  13. A Structure from Motion System
  14. 苹果手机屏幕尺寸大全
  15. Python将经纬度数据转换成浮点数据
  16. Elasticsearch数据库all shards failed
  17. 8583报文MAC验证实现过程
  18. 阿里云天池携手产学研心血管专家,共话心血管AI发展
  19. 【Go】Go语言基本数据类型
  20. 基于Unity开发实现的坦克游戏设计

热门文章

  1. wincc 写入mysql,WINCC读写SQL数据库的示例
  2. 《实变函数简明教程》,P63,可测集上的连续函数一定可测
  3. R语言二进制grd文件读取合并导出
  4. PNG图像转ICO的方法
  5. 怎么调整计算机的音量,笔记本音量怎么调_如何调整笔记本电脑的音量-win7之家...
  6. 易康(eCognition)对象几何特征--1:几何(Geometry)_范围(Extent)
  7. [leetcode]592. Fraction Addition and Subtraction
  8. java.sql.BatchUpdateException: Data truncation: Division by 0
  9. IOS 设备越狱原理
  10. 通往区块链的最后一张船票