如何从spring资源获取文件

时间:2012-11-21 17:22:54

标签: java spring

我有一个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不是分层的

我的错是什么?

1 个答案:

答案 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));