2012-07-13 171 views
9

从当前运行的JAR中提取文件是否有任何内置方法可用于允许用户从当前运行的JAR中提取文件并将其保存在磁盘上?通过代码

在此先感谢。

回答

8

使用getResourceAsStream (docs),之后你可以随心所欲地做任何事情。

对于双线,你可以使用one of the Commons IO copy methods

+0

的getResourceAsStream会给您可以访问任何匹配的资源上类路径,而不仅仅是一个带有“当前正在运行的JAR”的文件,假定这是一个使用“java -jar ”执行的JAR文件。 – jarnbjo 2012-07-13 14:28:06

+0

@jarnbjo是的。如果资源没有正确打包,这可能是一个问题,但考虑到这个问题,我认为这个问题比需要从“运行jar”特别是来自所有其他资源打包完全一样。 – 2012-07-13 14:32:10

+0

这样做。谢谢! – Konstantin 2012-07-17 17:12:04

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

请注意,某些Files.copy实现(java.nio.file.Files)不会关闭输入流 - >可能的内存泄漏。 – Vity 2018-01-25 07:24:16