读取不在runnable jar中的主包中的文本文件

时间:2012-04-23 18:24:52

标签: java eclipse swing jar runnable

我有一个Swing Java程序,它读取名为“res”的资源文件夹中的* .txt文件,其中包含不同类型JSON的子文件夹。当我直接从Eclipse运行时,一切都很好。如果我创建一个可执行jar,它不起作用。我设法使用一个可怕的解决方案,将我的所有文本文件放在它们被调用的包中。

要阅读它们,我使用以下代码:

InputStream is = this.getClass().getResourceAsStream(file + ".txt");

其中file是一个字符串。我以为这会在jar中搜索指定的文件,但显然不是。我试图将路径放到文件,res / subfolder / name_of_file.txt和子文件夹/ name_of_file.txt但无济于事。 这是我项目的结构

Project
   src
      com.package
   res
      JSON_type1
      JSON_type2
         file.txt

从com.package,我有一个必须从JSON_type2 / file.txt读取的类。除了将文本文件保存在子文件夹中的明显原因之外,我的GUI将使用这些子文件夹的内容填充下拉列表。

从我从其他问题中收集的内容来看,如果我想将文本文件保存在调用它们的包中,getResourceAsStream()将成为我的解决方案。除此之外,我发现了关于子类ClassLoader和覆盖findResource()的内容。如果可能的话,我想避免使用这个解决方案,因为我远不熟悉该类及其功能。

如果您需要更多信息,请告诉我。

谢谢

P.S。:这个问题来自我之前的问题here

3 个答案:

答案 0 :(得分:4)

您可以通过用斜杠划分包来解决包中的文件,例如对于file.txt,您应该getResourceAsStream("/res/JSON_type2/file.txt")

斜杠不适用于文件夹结构而不依赖于平台,它们只是类加载器处理文件的方式。

答案 1 :(得分:4)

// added leading / to indicate search from root of class-path
String file = "/res/JSON_type2/file.txt";
InputStream is = this.getClass().getResourceAsStream(file);

答案 2 :(得分:1)

通过执行此操作,我能够基本上获得您在Eclipse中寻找的功能:

src (folder)
   main (package)
      ...Classes...
other (folder)
   res  (package)
      ...txt files...

似乎Eclipse完全忽略文件夹而只关心包。只要我将文本文件放在 a 包中,我就可以使用getResourceAsStream(“/ res / somefile.txt”)获取一个InputStream。