getResourceAsStream不提供任何Stream

时间:2013-12-01 16:43:48

标签: eclipse jar stream resources

尝试使用其中的资源创建可执行文件.jar。快速提问: 为什么我会为此代码获取NullPointerException?

    String filename = "/settings.xml"
    try (InputStream is = this.getClass().getResourceAsStream(filename);
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));)
    {
        settingArray = (boolean[]) xStream.fromXML(reader);
    }

我使用Eclipse,文件settings.xml位于我项目的根目录中。以下代码可以很好地工作,但是在导出到jar之后却没有:

    try (final BufferedReader reader = new BufferedReader(new FileReader(filename)))
    {
        settingArray = (boolean[]) xStream.fromXML(reader);
    }

1 个答案:

答案 0 :(得分:2)

要使用this.getClass().getResourceAsStream("/settings.xml")加载,该文件不得位于项目的根目录。在运行时,Java不知道并关心包含应用程序源的eclipse项目。

它关心的是运行时类路径。该文件必须位于类路径的根目录中。要在那里,文件应该是

    如果从jar 执行应用程序,则在jar文件的根目录下
  • 如果从IDE执行应用程序,则在bin的根目录(或类,或者您选择为eclipse存储已编译的.class文件的目录命名的任何内容)目录。在那里,最简单的方法是将文件放在默认包中sources目录的根目录下。 Eclipse将通过复制将此源文件“编译”到bin目录。