为了使用Jaxb,我需要一个普通的java.io.File对象。因为我不想在一个相当新的项目中使用遗留代码,所以我想使用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,但是我不明白。

    最佳答案

    它不是很可爱,但是我最近像这样解决了这个问题:

    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
    

    09-27 12:56