为了使用Jaxb,我需要一个普通的java.io.File
对象。因为我不想在一个相当新的项目中使用遗留代码,所以我想使用java.nio.file.Path
对象。
随着gradle解决jar
文件中的依赖关系,我需要将它们作为com.sun.nio.zipfs.ZipPath
处理。现在的问题是,我仅将这些文件用于代码生成,而不必解压缩它们。
不幸的是,ZipPath.toFile()
方法抛出UnsupportedOperationException
,因此我无法将Path转换为File,这对于使用JaxbUnmarshaller
来说是必须的,以验证文件的正确布局并将其转换为实际的运行时对象。
我试过了:
如何在不解压缩的情况下从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