如何从 Jar/Classpath 创建文件实例
How to Create a File instance from the Jar/Classpath
我有一个可执行 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用作runtime/build
- 命令 运行 JAR:"java -jar myjar.jar"
- 应用程序代码和文件都位于同一个 jar 中
试试这个可能对你有帮助:
URL url = this.getClass().getResource("src/main/resources/file.xxx");
File file= new File(url.toURI());
简答:这不是 "File",所以你做不到。
JAR 文件是一个文件,但不是它的内容。
备选方案是:
尝试该方法的其他重载版本,InputStreams 是
通常是您的选项,您可以使用此代码加载它:
InputStream = getClass().getResourceAsStream("file.xxx");
将该文件移出 JAR 并移至 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用作runtime/build
- 命令 运行 JAR:"java -jar myjar.jar"
- 应用程序代码和文件都位于同一个 jar 中
试试这个可能对你有帮助:
URL url = this.getClass().getResource("src/main/resources/file.xxx");
File file= new File(url.toURI());
简答:这不是 "File",所以你做不到。
JAR 文件是一个文件,但不是它的内容。
备选方案是:
尝试该方法的其他重载版本,InputStreams 是 通常是您的选项,您可以使用此代码加载它:
InputStream = getClass().getResourceAsStream("file.xxx");
将该文件移出 JAR 并移至 JAR 的同一目录(考虑安全风险)