如何将ZipPath转换为文件?

为了使用Jaxb,我需要一个普通的java.io.File对象.因为我不想在一个非常新的项目中使用遗留代码,所以我想使用java.nio.file.Path对象.

当gradle解析jar文件中的依赖项时,我需要将它们作为com.sun.nio.zipfs.ZipPath处理.现在的问题是,我只将这些文件用于代码生成,并不一定要解压缩它们.

不幸的是,ZipPath.toFile()方法抛出UnsupportedOperationException,因此我无法将Path转换为文件,这是使用JaxbUnmarshaller所必需的,以验证文件的正确布局并将其转换为实际的运行时对象.

我试过了:

> ZipPath.toFile();导致错误
> Paths.get(ZipPath.toUri()).toFile();导致错误,因为结果再次是ZipPath

如何在不解压缩的情况下从ZipPath获取文件?

我想通过ZipFileSystem是可能的,但我不明白.

最佳答案
它不可爱但我最近解决了这个问题:

InputStream is = Files.newInputStream(zipPath);
final File tempFile = File.createTempFile("PREFIX", "SUFFIX");
tempFile.deleteOnExit();
try (FileOutputStream out = new FileOutputStream(tempFile))
{
    IOUtils.copy(in, out);
}
// do something with tempFile

转载注明原文:如何将ZipPath转换为文件? - 代码日志