如何将ZipPath转换为文件?

Do *_* Re 3 java path jaxb

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

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

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

我试过了:

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

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

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

小智 6

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

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
Run Code Online (Sandbox Code Playgroud)