我有一个Resource对象(org.springframework.core.io.ClassPathResource)。我需要获取File对象,但resource.getFile(
)抛出一个exesent File not Found。但是在调用resource.getURI()
后我得到了一个结果
jar:file:/D: .... file.jar!/com//test/0be14958-3778-40bf-bd3e-ee605fcdd3f0/verify
目录位于jar文件中。是否可以解决ClassPathResource的限制并创建File对象?
我尝试了一个新文件(resource.getURI()),但它失败了java.lang.IllegalArgumentException:URI不是分层的
我的错是什么?
答案 0 :(得分:4)
我认为从JAR中的某些内容中获取java.io.File是不可能的(因为它实际上不是文件)。来自ClassPathResource JavaDoc:
如果类路径资源驻留在文件系统中,则支持解析为
java.io.File
,但不支持JAR中的资源。
你没有提到为什么需要它作为java.io.File,但也许你可以重构代码以使用ClassPathResource.getInputStream方法(这使你能够读取资源)?
或者您也可以使用ClassPathResource.getInputStream将您想要的文件复制到文件系统上的临时文件中,然后将其用作直接的java.io.File。
File temp = File.createTempFile("temp", ".tmp");
org.apache.commons.io.IOUtils.copy(resource.getInputStream(), new FileOutputStream(temp));