2

Resource オブジェクト (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 に答える