从Java 7中运行的jar中提取资源文件夹
jar中的resources文件夹包含一个包含多个二进制文件的目录。我正在尝试使用以下代码来提取它们:从Java 7中运行的jar中提取资源文件夹,java,jar,resources,java-7,nio,Java,Jar,Resources,Java 7,Nio,jar中的resources文件夹包含一个包含多个二进制文件的目录。我正在尝试使用以下代码来提取它们: try(InputStream is = ExternalHTMLThumbnail.class.getResourceAsStream("/wkhtmltoimage")) { Files.copy(is, Paths.get("/home/dan/wkhtmltoimage"); } 这是抛出错误 java.nio.file.NoSuchFileException:/home/d
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);
从文件复制。当然没有!这就是为什么我要努力做到这一点。我对路径
和文件
的理解还不足以做到这一点。提取目录及其所有内容的最佳方法是什么
混乱,因为文件的文档。复制索赔
默认情况下,如果目标文件已存在或是符号链接,复制将失败
(显然,如果目标文件也不存在,它会失败?)
并列出可能的异常,并且NoSuchFileException
不是其中之一。如果您使用:
当然,你可以把所有这些都串成一行;我声明了变量以使其更具可读性。不存在的文件实际上可能就是您试图在其中创建文件的目录
/主页/dan/wktmlotimage
是否存在/home/dan
?如果您使用的是Mac电脑,则可能不会。我认为错误在于我的输入流有故障。备用。不,NoSuchFileException引用的是目标路径
,而不是输入InputStream
。但将整个资源加载到RAM中不需要。这不会编译。Files.write(byte[].File)不存在,这是在我的版本中抛出的操作;不是JDK的:com.google.common.io.Files。如果您的资源在一个.jar中,我猜它的大小使得短暂使用一点RAM可能没什么大不了的?无论如何;以上只是一个简单的建议;要解决的是你的问题,不是我的。
URL url = Resources.getResource(ExternalHTMLThumbnail.class, "wkhtmltoimage");
byte[] bytes = Resources.toByteArray(url);
Files.write(bytes, new File("/my/path/myFile"));