从Java 7中运行jar中提取资源文件夹

时间:2014-06-11 22:01:44

标签: java jar resources java-7 nio

我的jar中的我的资源文件夹包含一个包含多个二进制文件的目录。我试图使用此代码来提取它们:

try(InputStream is = ExternalHTMLThumbnail.class.getResourceAsStream("/wkhtmltoimage")) {
    Files.copy(is, Paths.get("/home/dan/wkhtmltoimage");
}

这是抛出错误

  

java.nio.file.NoSuchFileException:/ home / dan / wkhtmltoimage

来自

if (errno() == UnixConstants.ENOENT)
    return new NoSuchFileException(file, other, null);
UnixException.java中的

。即使在Files.java中传递了正确的选项:

ostream = newOutputStream(target, StandardOpenOption.CREATE_NEW,
    StandardOpenOption.WRITE);

来自Files.copy。当然没有!这就是我试图成功的原因。我还不清楚PathFiles是否足以做到这一点。提取目录及其所有内容的最佳方法是什么?

因为Files.copy声明

的文档而感到困惑
  

默认情况下,如果目标文件已存在或者是符号链接

,则复制将失败

(如果目标文件也不存在,显然会失败?)

并列出可能的例外情况,NoSuchFileException不是其中之一。

2 个答案:

答案 0 :(得分:1)

如果您正在使用Guava

URL url = Resources.getResource(ExternalHTMLThumbnail.class, "wkhtmltoimage");
byte[] bytes = Resources.toByteArray(url);
Files.write(bytes, new File("/my/path/myFile"));

你当然可以把这一切都串成一条线;我宣布变量使其更具可读性。

答案 1 :(得分:0)

不存在的文件实际上可能是您尝试在其中创建文件的目录

  

/家庭/旦/ wkhtmltoimage

/home/dan是否存在?如果你是在Mac上,可能不会。