如何在 Java jar 内部读取 .sql 文件?

How to read .sql files internally in Java jar?

我目前在 SQL 中有一个架构文件文件夹,在执行应用程序时会执行这些文件。这就是我用来读取和执行这些文件的方式:

private static String getSchemaFromFile(String filename) throws IOException {
    StringBuilder stringBuilder = new StringBuilder();
    BufferedReader bufferedReader = new BufferedReader(new FileReader("src/schema/" + filename + ".sql"));
    String queryString;

    .....
}

我认为问题与架构文件夹的路径有关。我尝试查看 getResourceAsStream,但似乎无法正常工作。

当我从 eclipse 运行 时它工作正常但是当我将它编译成 JAR 时它说找不到文件。如何确保路径正确?

从 eclipse 开始工作,因为 eclipse 启用 java 代码从 src/schema/ directory.But 搜索,当您使用 jar 时它需要一个绝对路径。

我建议将放置 .sql 文件的绝对路径存储在 属性 文件中,以便您可以在需要时随时更改 it.Suppose 您从 属性文件,您已获取位置 absolutePath。然后你可以这样做 -

BufferedReader bufferedReader = new BufferedReader(new FileReader(absolutePath + filename + ".sql"));

类似的东西。顺便说一句,这可能会失败,除非你是 运行 你的 jar(在 eclipse 中执行它可能行不通)。

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("src/schema/" + filename + ".sql")));

如果模式在 jar 文件中,则 src/schema 可能无效,更有可能在 schema/ 中。首先你需要确认这一点。 jar 文件实际上是一个 zip 文件,因此您可以使用 winzip 等实用程序将其解压缩以检查内容。

一旦确认模式文件所在的位置,就无法使用 FileReader 访问它们,因为它们不在文件系统中,而是在您的 jar 中。要从 jar 文件中访问文件,getResourceAsStream 是正确的方法。您上次尝试时可能定义了错误的文件夹。