2014-11-01 134 views
0

我有一个问题,我想列出在“默认”文件夹中的文件,这个文件夹是在资源文件夹:不能getResourcesAsStream()从一个文件夹(在一个罐子里)

-resources /语言/默认/ manyfiles

第二行抛出一个NullPointerException

InputStream in = getClass().getClassLoader().getResourceAsStream("languages/default/"); 
BufferedReader br = new BufferedReader(new InputStreamReader(in)); 

看来我不能用文件夹,但只有一个文件做到这一点。问题是我无法使用File,因为它在一个jar里面。

编辑:这里的jar的内容: http://www.mediafire.com/view/05u5w20xupt1mo1/javapbfolder.bmp

+0

路径是否正确?如果你有一个'URLClassLoader'实例,通常情况下,'getResourceAsStream'应该返回文件夹中的项目。 – 2014-11-01 10:42:45

+0

你试图要求一个*目录*作为一个流......这是没有意义的,无论它是在jar文件还是在文件系统中。 – 2014-11-01 10:47:30

+0

@JonSkeet实际上,NIO.2 API提供了一个DirectoryStream以及一个用于目录AFAIK的java.util.stream.Stream。但是,如果我没有记错,它们与java.io流不同。 – Puce 2014-11-01 13:16:55

回答

0

有列出文件夹的内容,没有标准的方式。原因在于类资源加载背后的文件系统的概念,只是资源的名称/位置。

这取决于你想要做什么,如何解决这个问题。我想起了可能的解决方案:

  1. 从目录中的一个资源检索URL。从URL中提取JAR文件并通过ZipFile类打开JAR。这是“hacky”,根据您运行的平台和安全设置,可能会或可能不会工作。

  2. 打包包含资源列表的JAR时生成索引文件。

  3. 将JAR放入资源中,然后通过ZipFile打开。

+0

我想我会尝试第二种解决方案,它似乎是最干净的方式。 – Spooky 2014-11-01 10:52:21

+0

当您说“打包JAR时生成索引文件”,有没有办法自动执行? – Spooky 2014-11-01 11:07:56

+0

注意:使用NIO.2 File API和zip文件系统提供程序,阅读jar和甚至列出jar内的dirs内容变得比手动使用ZipFile更简单。 – Puce 2014-11-01 13:10:53

相关问题