ClassLoader的异常行为

时间:2011-09-07 05:06:04

标签: java class load inputstream

public InputStream getResourceAsStream ( Class className, String name){
       InputStream in = null;
       in = className.getClassLoader().getResourceAsStream(name);
       return in;
   }

className:使用Class.forName()加载的类。

name:同一目录中存在的资源的名称。

问题:结果始终为null。

虽然我尝试了很多方法,但是有人能告诉我上面的代码有什么问题。

2 个答案:

答案 0 :(得分:1)

几天前我自己也遇到过同样的问题。但我发现我通过这个名字的方式是错误的。我的意思是我搞砸了相对路径和绝对路径。如果它无法找到名称,那么它将抛出nullpointerException。

要检查您的代码是否正常,问题仅在于名称,只需对代码的完整路径进行硬编码并确保其加载。如果是这样,那么你必须纠正它的正常问题。其次,唯一的另一个问题是如果你从静态块加载它然后语法可能会有所不同。否则应该没有问题。

在你可以查看文件加载的好地方 http://www.javaworld.com/javaworld/javaqa/2003-08/01-qa-0808-property.html?page=2

让我知道这是否有帮助..

答案 1 :(得分:0)

如果您的所有图像都在jar文件中,那么我假设您将创建一个单独的图像文件夹。这样,您只需更换图像名称即可以相同的方式访问所有图像。我相信,一旦你制作了jar文件,一切都会爆炸。如果你的图像被放在父文件夹下,即com / demo / images那么你可以简单地使用上面的方法并提供aboslute路径,即getResourceasStream(/com/demo/images/image001.jpeg)。还有一种更好的方法。当您在服务器上部署时,您可以创建一个单独的图像文件夹作为系统属性,然后只需执行system.getenv(prop_name),以便它可以星际转移到该图像位置。实际上有几种方法可以做到。