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

时间:2015-04-08 20:42:53

标签: java jar bufferedreader filereader

我目前在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时它说文件未找到。如何确保路径正确?

3 个答案:

答案 0 :(得分:1)

这些方面的东西。 BTW这可能会失败,除非你正在运行你的jar(在eclipse中执行它可能不起作用)。

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

答案 1 :(得分:0)

从eclipse开始工作是因为eclipse允许java代码从src/schema/目录中搜索。但是当你使用jar时,它需要一个绝对路径。

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

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

答案 2 :(得分:0)

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

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