2011-09-07 36 views
1
public InputStream getResourceAsStream (Class className, String name){ 
     InputStream in = null; 
     in = className.getClassLoader().getResourceAsStream(name); 
     return in; 
    } 

className:使用Class.forName()加载的类。ClassLoader的异常行为

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

问题:结果始终为空。

有谁能告诉我上面的代码有什么问题,尽管我已经尝试了很多方法。

回答

1

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

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

一个很好的地方,在ü可以检查出文件的加载是 http://www.javaworld.com/javaworld/javaqa/2003-08/01-qa-0808-property.html?page=2

让我知道,如果这有助于..

+0

谢谢Raveesh,解决方案正在工作。我错过了替换'。'与'/',现在它更换后工作正常。但是我确实有一个问题。我的一些图像出现在同一位置,没有被加载,但我可以在jar文件中看到它们。你知道它背后的任何可能的原因吗?谢谢 – Ashish

0

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

+0

,你能解释如何创建图像文件夹作为系统属性? – Ashish