2

我有一个资源对象(org.springframework.core.io.ClassPathResource)。我需要获取 File 对象,但是resource.getFile() 抛出异常 File not Found。但在调用后resource.getURI()我有一个结果

jar:file:/D: .... file.jar!/com//test/0be14958-3778-40bf-bd3e-ee605fcdd3f0/verify

目录位于 jar 文件中。是否可以解决 ClassPathResource 的限制并创建 File 对象?

我尝试了一个新的 File(resource.getURI()) 但它因 java.lang.IllegalArgumentException 失败:URI 不是分层的

我的错是什么?

4

1 回答 1

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));
于 2012-11-21T17:50:23.037 回答