关于Resource的获得问题(解决马上结贴)

SmileAndHappy 2005-08-06 05:48:34
大家好:
我对ClassLoader 的InputStream getResourceAsStream(String name)方法有些疑问:
我是这样理解的:当name不以"/"开头,那么ClassLoader按照寻找class的方式来寻找Resource所以如果name为com/test/a.txt那么应把a.txt放在com/test文件夹下,并且把com文件夹放在classpath中。也就是ClassLoader把a.txt当作是class文件来寻找了。我做了几个实验好像是这样的。例子如下:
import java.io.*;

public class UseResourceTest {
public static void main(String[] args) throws Exception {
ClassLoader ld = ClassLoader.getSystemClassLoader();
InputStream in = ld.getResourceAsStream("com/test/a.txt");
System.out.println(in);
}
}
我把com文件夹放在classpath之外就输出null,否则输出非null。

但是我不明白的地方:以"/"开头的name有什么用?比如name为"/a.txt"则不管我把a.txt放在哪里都是输出null。
import java.io.*;

public class UseResourceTest {
public static void main(String[] args) throws Exception {
ClassLoader ld = ClassLoader.getSystemClassLoader();
InputStream in = ld.getResourceAsStream("/a.txt");
System.out.println(in);
}
}
是不是这种方式只能在jar包里使用?
希望大侠指点。

...全文
97 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
SmileAndHappy 2005-08-06
  • 打赏
  • 举报
回复
我明白了,谢谢!下面自我总结,和大家分享。
我犯了个错误:

要区分Class的getResourceAsStream和ClassLoader的getResourceAsStream方法。
ClassLoader的该方法如果name以/开头那么就什么也找不到了。(linux下可能可以)

而Class的getResourceAsStream方法如果name以/开头那么就把/以后的name传递给ClassLoader的
getResourceAsStream方法。如果不已/开头那么将该class的包名加上name作为参数(用/代替.)之后
传给ClassLoader的对应方法。

看一下程序:
package com.test;
import java.io.*;

public class UseResourceTest {
public static void main(String[] args) throws Exception {
UseResourceTest test = new UseResourceTest();
InputStream in = test.getClass().getResourceAsStream("a.txt");
System.out.println(in);
}
}
效果相当于:
package com.test;
import java.io.*;

public class UseResourceTest {
public static void main(String[] args) throws Exception {
InputStream in = ClassLoader.getSystemClassLoader().getResourceAsStream("com/test/a.txt");
System.out.println(in);
}
}

呵呵,恍然大悟。测试通过~~
jFresH_MaN 2005-08-06
  • 打赏
  • 举报
回复
这个问题蛮有意思的。
其实加了"/"在前面就是绝对路径,Linux系统里面这个就是绝对路径,而Windows系统没有这个根的概念,所以你怎么放都是找不到路径的。。。

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧