2013-04-05 42 views
0

我知道这个问题已经被问了好几次,但我认为我的问题不同于别人了一下:的InputStream

String resourcePath = "/Path/To/Resource.jar"; 

File newFile = new File(resourcePath); 
InputStream in1 = this.getClass().getResourceAsStream(resourcePath); 
InputStream in2 = this.getClass().getClassLoader().getResourceAsStream(resourcePath); 

文件,对象NEWFILE是完全没问题(在.jar文件已经找到,你可以得到它的元数据,如newFile.length()等)

另一方面,InputStream总是返回null。 我知道javadoc说getResourceAsStream()是空的,如果没有找到这个名字的资源,但文件在那里! (显然,因为它在文件对象中)

任何人都知道为什么会发生这种情况,以及我如何解决它,以便我可以在InputStream中获得.jar文件?

+0

JAR文件中的资源本身不是一个文件。 – EJP 2013-04-05 12:04:49

回答

1

getResourceAsStream()方法不会从文件系统加载文件;它从类路径加载资源。您可以使用它来加载,例如,打包在您的JAR中的属性文件。您无法使用它从文件系统加载文件。

因此,如果您的文件驻留在文件系统上,而不是您的JAR文件中,那么最好使用FileInputStream类。