繁体   English   中英

如何从Jar / Classpath创建文件实例

[英]How to Create a File instance from the Jar/Classpath

我有一个可执行的JAR文件,其中有一个文件,我想通过代码(不是InputStream或其他任何文件……)作为java.io.File实例打开。

它是一个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 Apps可以轻松地从webapp根目录中加载所有内容,我对为何JAR应用程序行为不同感到困惑。

附加信息:

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

简短的回答:它不是“文件”,因此您无法做到。

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

替代方法是:

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

    InputStream是= getClass()。getResourceAsStream(“ file.xxx”);

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

试试这个可能对您有帮助:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM