【发布时间】:2015-08-12 10:33:25
【问题描述】:
我有一个可执行的 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 应用程序可以轻松地从 webapp 根目录加载所有内容,我对为什么 JAR 应用程序的行为不同感到困惑。
附加信息:
- 使用 Java8 作为运行时/构建
- 运行 JAR 的命令:“java -jar myjar.jar”
- 应用程序代码和文件都位于同一个 jar 中
【问题讨论】:
-
您不能以
File实例的形式访问 inside jar 中的资源。如果您可以控制someMethodThatUsesTheFile方法,则应将其更改为接受InputStream。 -
JAR 中的资源不是文件,
File对象不能用 URL 参数构造。
标签: java file maven executable-jar