ConfigUtil.class.getResource
不得不吐槽这帮家伙,说来说去没有一个是用心说的,对于我这渣渣来说,不说明白原里我是不会的,不罢休的。
下面这些事转载 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的位置 他获取的文件位置就是标红的位置文件
ConfigUtil.class.getResource相关推荐
- linux下文件操作
以前都是window下开发,服务器也大多是window环境,加上取文件路径的问题还是比较少的,今天我的服务放到linux下跑不起来了,看了下,是文件问题.. 修改完之后如下:(问题解决) packag ...
- Spring mail 邮件服务及其参数配置(properties文件的读写)
一个Web 系统通常会少不了邮件服务的,比如用于注册,密码找回,订单提醒等应用场景.Spring 封装了一个简单易用的关于邮件发送的工具类JavaMailSenderImpl . 系统要提供邮件服务, ...
- 关于Class.getResource和ClassLoader.getResource的路径问题
本文转自:http://www.cnblogs.com/yejg1212/p/3270152.html Java中取资源时,经常用到Class.getResource和ClassLoader.getR ...
- JAVA class.getResource()的用法
用JAVA获取文件,听似简单,但对于很多像我这样的新人来说,还是掌握颇浅,用起来感觉颇深,大常最经常用的,就是用JAVA的File类,如要取得c:/test.txt文件,就会这样用File file ...
- log4j用于读取.xml文件的出现了错误,类加载器.getResource(user.xml).getPath()返回路径空格变成了%20...
最近在训练web的三层开发模式,写了一个小程序,为了模拟数据库,用了xml来进行存放数据,因此需要将xml文件装载到内存中去,代码如下 private static String fileName;s ...
- ConfigUtil读取配置文件
package utils;import java.util.ResourceBundle;public class ConfigUtil {private static ResourceBundle ...
- getPath()和getResource()找不到文件(NullPointerException)的原因(idea创建properties文件)
1.创建一个目录 2.让它成为Resources Root 3.创建配置文件(properties) 4.创建成功 5.getPath().getResource()找到了文件
- Java文件路径(getResource)
getResourceAsStream ()返回的是inputstream getResource()返回:URL Class.getResource("") 返回的是当前C ...
- java中Class.getResource用法(用于配置文件的读取)
用JAVA获取文件,听似简单,但对于很多像我这样的新人来说,还是掌握颇浅,用起来感觉颇深,大常最经常用的,就是用JAVA的File类,如要取得c:/test.txt文件,就会这样用File file ...
- Class.getResource()与Class.getClassLoader().getResource()解析
我们在eclipse上写的.java文件最终会被编译成一个.class的字节码文件.而java源文件存储在src文件下,而编译后的.class字节码文件存储在bin文件下. 一. 通过Class.ge ...
最新文章
- 端到端训练 联合训练_曲靖两家银行举行联合军事拓展训练 献礼祖国71周年华诞...
- 判断浏览器是否为IE内核的最简单的方法
- 分布式部署携程Apollo构建配置中心
- python如何调用c函数实现真正意义的多线程_python如何使用多线程执行多个函数?...
- Python 的构建工具 setup.py
- bat代码雨代码流星_bat-入门系列-03-判断结构2
- 数据库每日一题 2020.05.21
- 中药和西药的历史渊源,到底谁才是科学好药
- 树莓派Raspberry实践笔记—显示分辨率配置
- 2016大学里的流年回忆
- UltraISO 制作U盘启动盘(Ubuntu、CentOS)
- 西门子g120变频器接线图_西门子变频器G120应用技术手册
- A Structure from Motion System
- 苹果手机屏幕尺寸大全
- Python将经纬度数据转换成浮点数据
- Elasticsearch数据库all shards failed
- 8583报文MAC验证实现过程
- 阿里云天池携手产学研心血管专家,共话心血管AI发展
- 【Go】Go语言基本数据类型
- 基于Unity开发实现的坦克游戏设计
热门文章
- wincc 写入mysql,WINCC读写SQL数据库的示例
- 《实变函数简明教程》,P63,可测集上的连续函数一定可测
- R语言二进制grd文件读取合并导出
- PNG图像转ICO的方法
- 怎么调整计算机的音量,笔记本音量怎么调_如何调整笔记本电脑的音量-win7之家...
- 易康(eCognition)对象几何特征--1:几何(Geometry)_范围(Extent)
- [leetcode]592. Fraction Addition and Subtraction
- java.sql.BatchUpdateException: Data truncation: Division by 0
- IOS 设备越狱原理
- 通往区块链的最后一张船票