通过代码从当前运行的JAR文件中提取文件

14
有没有内置方法可以让用户从当前运行的JAR文件中提取一个文件并保存到他们的磁盘上?谢谢。
3个回答

22
File file = new File("newname.ext");
if (!file.exists()) {
     InputStream link = (getClass().getResourceAsStream("/path/resources/filename.ext"));
     Files.copy(link, file.getAbsoluteFile().toPath());
}

请注意,一些 Files.copy 实现(java.nio.file.Files)不会关闭输入流 -> 可能会导致内存泄漏。 - Vity

10

getResourceAsStream将使您能够访问类路径上的任何匹配资源,而不仅仅是在“当前运行的JAR”中的文件,假设这是使用“java -jar <JAR-file>”执行的JAR文件。 - jarnbjo
@jarnbjo 是的。如果资源没有正确打包,那可能是个问题,但考虑到问题的范围,我认为这个问题比仅需要它来自“运行的jar”要广泛得多,而排除所有其他完全相同打包的资源。 - Dave Newton
请注意,您可能需要在jar文件中指定绝对路径。然后任何类都可以使用。例如:InputStream is = Object.class.getResource("/" + filename).openStream(); - Per Lindberg

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接