java getResourceAsStream:InputStream为空

java getResourceAsStream:InputStream为空,java,eclipse,resources,classpath,executable-jar,Java,Eclipse,Resources,Classpath,Executable Jar,在将应用程序导出为可运行jar后,我在加载资源方面遇到了问题 情况如下: URI queryResource = this.getClass().getResource("/queries/").toURI(); File queryDir = new File(queryResource); 我在类路径中有一个资源文件夹。在资源文件夹中有另一个文件夹,其中包含多个表示数据库查询的文本文件。我获取目录的第一个解决方案是: URI queryResource = this.getClass().

在将应用程序导出为可运行jar后,我在加载资源方面遇到了问题

情况如下:

URI queryResource = this.getClass().getResource("/queries/").toURI();
File queryDir = new File(queryResource);
我在类路径中有一个资源文件夹。在资源文件夹中有另一个文件夹,其中包含多个表示数据库查询的文本文件。我获取目录的第一个解决方案是:

URI queryResource = this.getClass().getResource("/queries/").toURI();
File queryDir = new File(queryResource);
当我在eclipse中测试代码时,这一切都如期进行。当我将应用程序导出到可运行的字符中时,我得到了
NullPointerExceptions
。对这个问题的研究产生了一个解决方案,它使用
getResourceAsStream
而不是
getResource
方法

我首先在几个用于配置的XML文件上测试了这一点。所以我用了:

InputStream in = this.getClass().getResourceAsStream(/config/xml/configFile.xml);
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
parser.parse(in, this);
此解决方案适用于eclipse和导出的jar中的配置文件。为了加载查询文件,我编写了一个小实用程序方法,使用
InputStream
创建一个临时目录,将查询文件复制到其中。方法如下所示:

public static URI createDirectory(Class<?> resourceClass, String directory) throws IOException {

    //create temp dir to store the files
    File tempDir = FileUtility.createTempDir();

    InputStream in = resourceClass.getResourceAsStream(directory));
    BufferedReader reader = new BufferedReader(new InputStreamReader(in));

    String readLine = null;

    while((readLine = reader.readLine()) != null) {

         InputStream inputFileStream = resourceClass.getResourceAsStream(resource + readLine);
         File tempFile = new File(tempDir.getAbsolutePath() + "\\" + readLine);
         tempFile.createNewFile();
         tempFile.deleteOnExit();

         FileOutputStream fos = new FileOutputStream(tempFile);
         IOUtils.copy(inputFileStream, fos);
    }

    return tempDir.toUri();
}
在eclipse中运行应用程序时,这同样可以正常工作。然而,在导出的jar中,
createDirectory
方法中的第一个
InputStream
是空的。流不是
null
它被实例化,但没有内容

有人知道怎么回事吗?请让我知道

问候

PS:带有IDE的机器目前无法访问web,所以我手工键入了这个。可能有一些错误。我写的代码没有任何语法错误。如果你在这篇文章的代码中发现了什么,那就是我的错误