关于class.getResourceAsStream() 与class.getClassLoader().getResourceAsStream()区别
来源:互联网 发布:食堂订餐软件 编辑:程序博客网 时间:2024/06/05 01:59
项目工程下读取文件的几种方式:
1.图片在src目录下;
相对路径:
InputStream inputStream = getClass().getClassLoader().getResourceAsStream("getTclazz.jpg");//相对于src目录,使用相对路径,不加 /--------------------------------------------------------- InputStream inputStream = getClass().getResourceAsStream("/getTclazz.jpg"); /*此处的 '/' 相对于src目录*/
绝对路径:
InputStream inputStream = new FileInputStream("C:\\Users\\12746\\Workspaces\\MyEclipse 8.5\\firstJDBCPro2\\src\\getTclazz.jpg");------------------------------------------------------InputStream inputStream = new FileInputStream("C:/Users/12746/Workspaces/MyEclipse 8.5/firstJDBCPro2/src/getTclazz.jpg");
2.图片在dao目录下;
相对路径:
InputStream inputStream = getClass().getClassLoader().getResourceAsStream("com/jdbc/dao/getTclazz.jpg"); /*--/com/jdbc/dao/getTclazz.jpg 错误!!!--*/-------------------------------------------------------InputStream inputStream = getClass().getResourceAsStream("/com/jdbc/dao/getTclazz.jpg");//使用绝对路径---------------------------------------------------------调用的java类文件在该包下,【如测试类和文件都在com.jdbc.dao包下】则可使用: InputStream inputStream = getClass().getResourceAsStream("getTclazz.jpg");//使用相对路径时 ,相对的是该类所在的位置
绝对路径:
InputStream inputStream = new FileInputStream("C:/Users/12746/Workspaces/MyEclipse 8.5/firstJDBCPro2/src/com/jdbc/dao/getTclazz.jpg");-------------------------------------------------------InputStream inputStream = new FileInputStream("C:\\Users\\12746\\Workspaces\\MyEclipse 8.5\\firstJDBCPro2\\src\\com\\jdbc\\dao\\getTclazz.jpg");
分析:
1)InputStream inputStream = getClass().getResourceAsStream("getTclazz.jpg");2)InputStream inputStream = getClass().getResourceAsStream("/com/jdbc/dao/getTclazz.jpg");3)InputStream inputStream = getClass().getClassLoader().getResourceAsStream("com/jdbc/dao/getTclazz.jpg");
第一种和第二种方式是采用Class对象去加载,第三种采用ClassLoader对象去加载资源文件,之所以Class对象也可以加载资源文件是因为Class类封装的ClassLoader的getResourceAsStream方法。从Class类中的源码中可以看出:
public InputStream getResourceAsStream(String name) { name = resolveName(name); ClassLoader cl = getClassLoader0(); if (cl==null) { // A system class. return ClassLoader.getSystemResourceAsStream(name); } return cl.getResourceAsStream(name); }
之所以这样做无疑还是方便客户端的调用,省的每次获取ClassLoader才能加载资源文件的麻烦。
路径问题:
第三种是最本质的做法,前两种也是基于第三种去实现的。JVM会使BootstrapLoader去加载资源文件。所以路径还是这种相对于工程的根目录即”com/jdbc/dao/getTclazz.jpg”(不需要“/”)。
第一种是采用的相对路径,资源文件相对于当前这个类的位置,这种方式Class对象做了一些处理。即resloveName(name)这个方法。最终name还是会转换成适合第三方式的name参数
第二种是采用绝对路径 [/],绝对路径是相对于classpath根目录的路径(工程里 “src” 目录,或服务器”/WEB-INF/classes”目录(存放.class文件的目录))。
3.图片在项目路径下-contextPath 下
相对路径:
InputStream inputStream = new FileInputStream("getTclazz.jpg");
绝对路径:
InputStream inputStream = new FileInputStream("C:\\Users\\12746\\Workspaces\\MyEclipse 8.5\\firstJDBCPro2\\getTclazz.jpg");
【4】不同路径的获取
- 4.1 获取当前类路径
/C:/Users/12746/Workspaces/MyEclipse%208.5/Spring-2/WebRoot/WEB-INF/classes/com/web/test/path = this.getClass().getResource("").getPath();
- 4.2 获取项目根路径
/* 获取工程根目录C:\Users\12746\Workspaces\MyEclipse 8.5\Spring-2 */path = System.getProperty("user.dir");
- 4.3 获取类加载路径
1. / 表示相对于src目录;2. getClassLoader()只能使用相对路径 path = this.getClass().getResource("/").getPath(); /*/C:/Users/12746/Workspaces/MyEclipse%208.5/Spring-2/WebRoot/WEB-INF/classes/*/ path = this.getClass().getClassLoader().getResource("").getPath();
以上举例,文件在src或项目下,并没有在WebRoot下。如果文件在WebRoot下,请使用ServletContext获取。
0 0
- class.getResourceAsStream与class.getClassLoader().getResourceAsStream区别
- 关于class.getResourceAsStream() 与class.getClassLoader().getResourceAsStream()区别
- 关于class.getResourceAsStream() 与class.getClassLoader().getResourceAsStream()区别
- class.getResourceAsStream与class.getClassLoader().getResourceAsStream
- this.class.getClassLoader().getResourceAsStream
- this.class.getClassLoader().getResourceAsStream
- this.class.getClassLoader().getResourceAsStream
- this.class.getClassLoader().getResourceAsStream
- 正确使用Class.getResourceAsStream("")与Class.getClassLoader().getResourceAsStream("")
- this.class.getClassLoader().getResourceAsStream与this.class.getResourceAsStream
- Class.getClassLoader().getResourceAsStream()和Class.getResourceAsStream()
- Class.getResourceAsStream()和Class.getClassLoader().getResourceAsStream()用法
- 关于class.getResourceAsStream(String name)与 class.getClassLoader().getResourceAsStream(String name)的路径
- 在java开发中关于class.getResourceAsStream(String name)与 class.getClassLoader().getResourceAsStream(String
- 关于class.getResourceAsStream(String name)与 class.getClassLoader().getResourceAsStream(String name)的路径
- ClassLoader.getSystemResourceAsStream与Class.getClassLoader().getResourceAsStream()
- Class.getResourceAsStream()与ClassLoader.getResourceAsStream()的区别
- ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别
- 《Effective C++》学习笔记
- 1062. Talent and Virtue (25)
- 【node.js】使用node.js搭建一个本地web服务器
- 关于JQuery中的$.each()与$().each的理解
- 工资表达式 字符串
- 关于class.getResourceAsStream() 与class.getClassLoader().getResourceAsStream()区别
- Android Permission访问权限大全
- ubuntu 14.04 設定hostname
- mybatis给对象赋值
- 乱码问题(1),MyEclipse中乱码
- C# 的逻辑判断语句 -5
- Android群英传——第四章动态改变ListView的布局
- 机器学习入门
- maven使用---创建web项目(亲测已创建成功)