如何从Jar / Classpath创建File实例

时间:2015-08-12 10:33:26

标签: java file maven executable-jar

我有一个可执行的JAR,其中有一个文件,我想从代码中打开java.io.File实例(不是InputStream或其他任何东西......只是文件)。

它是一个maven项目,文件位于" src / main / resources / file.xxx"的根目录。 打包后,该文件位于jar的根目录下(验证它在那里)。

我的第一次尝试:FileNotFoundException

java.io.File myFile = new java.io.File("file.xxx");
someMethodThatUsesTheFile(myFile); //I really need it to be a file!!!

其他尝试:FileNotFoundException

java.io.File myFile = new java.io.File("/file.xxx");
java.io.File myFile = new java.io.File("classpath:file.xxx");
java.io.File myFile = new java.io.File("classpath:/file.xxx");

我不确定最近会发生什么。 Web应用程序可以轻松地从webapp根目录加载所有内容,我很困惑为什么JAR应用程序的行为不同。

其他信息:

  • 使用Java8作为运行时/构建
  • 命令运行JAR:" java -jar myjar.jar"
  • 应用程序代码和文件都位于同一个jar

2 个答案:

答案 0 :(得分:0)

简答:这不是"文件",所以你不能这样做。

JAR文件是文件,但不是其内容。

替代方案是:

  • 尝试该方法的其他重载版本,InputStreams 通常是您的选项,您可以使用以下代码加载它:

    InputStream is = getClass()。getResourceAsStream(" file.xxx");

  • 将该文件移出JAR并进入JAR的同一目录(考虑安全风险)

答案 1 :(得分:-2)

试试这个可以帮到你:

URL url = this.getClass().getResource("src/main/resources/file.xxx");
File file= new File(url.toURI());