一劳永逸地解释如何正确访问DATABASE、HTML 文件等资源。
假设我的 Maven JavaFX 项目看起来像这样(检查图像)。
它有它的
src/main/java
和
src/main/resources
在构建路径中
在内部资源中,我有一个包含数据库 的文件夹和一个包含html 文件 的文件夹。
这是我访问数据库的方式,当我在 IDE 中运行它时它可以工作,但是在 mvn native
之后打包或运行 .exe 文件后不起作用Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:src/main/resources/DB/SeeYourUse.sqlite");
以下是我如何访问我的 HTML 文件 以在 WebView
中使用它String url = Main.class.getResource("/HTML/help.html").toExternalForm();
webEngine.load(url);
它确实可以在 IDE 中运行(jfx:运行并作为 java 应用程序运行),但在部署后没有机会运行它。
这是我在运行并记录时遇到的错误。
java.sql.SQLException: path to 'src/main/resources/DB/SeeYourUse.sqlite': 'E:\Programming\Java\Work\SeeYourUse\target\jfx\native\SeeYourUse-0.0.1-SNAPSHOT\app\src' does not exist
问题是: 如何正确加载数据库和 HTML 以最大限度地使用它?
最佳答案
src/main/resources 被直接复制到你的 jar 文件中,target/classes 也是如此。您可以通过返回资源 URL 的 class.getResource(String name)
访问资源,也可以通过将打开流的 Class.getResourceAsStream(String name)
访问资源.但是,在您的数据库的特定情况下,我不会将资源放在 jar 文件中,因为 jdbc 驱动程序直接从文件系统加载数据库文件。您应该通过打开数据库流并将其写入外部目录来将数据库提取到外部位置,至少在它不存在的情况下。
对于 html 文件,如果是此类静态资源,您可以检索 URL 并直接使用它们,如上所述。但是请注意,网络引擎将无法使用从 html 文件引用的其他资源,除非您可以替换它用于查找它们的逻辑。在这种情况下,我什至会将 html 文件及其依赖的所有文件提取到一个临时位置。
关于java - 访问 Java[Maven] 项目中的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35865042/