1

创建加载资源的 .jar 让我很头疼。我在这里阅读了很多帖子,但我不知道我应该如何使用

this.getClass().getResourceAsStream("..");

我需要将数据库加载到内存中:

File file = new File(Thread.currentThread().
getContextClassLoader().getResource("phonebook").getFile());                          
String attachStmt = "ATTACH '" + file + "' AS tempInMemoryDb";
stmt.execute(attachStmt);

因此,如果我从 NetBeans 运行项目,它会很好地加载数据库,但是当我清理和构建并从 dis 文件夹运行 jar 文件时,我在命令行中看到电话簿文件(数据库文件)没有加载。所以,我的问题是:我应该如何使用this.getClass().getResourceAsStream("..")来创建文件并将其传递给"String attachStmt = "ATTACH '" + file + "' AS tempInMemoryDb";我可以加载数据库?

4

1 回答 1

3

ATTACH需要一个文件作为输入,但是当您为应用程序构建 JAR 时,您所引用的文件在此 JAR 中并且未提取!在这种情况下,您需要先将数据写入文件。

通过调用创建一个空的临时文件File.createTemporaryFile。使用此问题的答案中描述的方法之一将返回的流的内容复制getResourceAsStream到临时文件中。

程序退出时,不要忘记删除临时文件。确保这一点的一种方法是调用deleteOnExit第一步中返回的临时文件对象。

于 2012-11-05T12:02:16.810 回答