java getResourceAsStream:InputStream为空
在将应用程序导出为可运行jar后,我在加载资源方面遇到了问题 情况如下: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().
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,所以我手工键入了这个。可能有一些错误。我写的代码没有任何语法错误。如果你在这篇文章的代码中发现了什么,那就是我的错误