有没有一种方法可以在Java中以编程方式读取.jmod文件?

有没有一种方法可以在Java中以编程方式读取.jmod文件?,java,module,zip,zipinputstream,Java,Module,Zip,Zipinputstream,我用7-zip打开了一个.jmod文件,可以看到其中的内容。我试图用ZipInputStream以编程方式阅读它,但它不起作用:有人知道怎么做吗?没有关于JMOD文件使用格式的文档。据我所知,这不是一个疏忽,因为将格式作为一个实现细节,意味着他们可以随时更改格式,而无需通知。也就是说,目前JMOD文件似乎是以ZIP格式打包的;引用JEP261的以下内容: JMOD文件的最终格式是一个悬而未决的问题,但目前它是基于ZIP文件的 然而,我在JEP261中找不到这句话。它看起来来自于规范的旧版本,至少

我用7-zip打开了一个.jmod文件,可以看到其中的内容。我试图用ZipInputStream以编程方式阅读它,但它不起作用:有人知道怎么做吗?

没有关于JMOD文件使用格式的文档。据我所知,这不是一个疏忽,因为将格式作为一个实现细节,意味着他们可以随时更改格式,而无需通知。也就是说,目前JMOD文件似乎是以ZIP格式打包的;引用JEP261的以下内容:

JMOD文件的最终格式是一个悬而未决的问题,但目前它是基于ZIP文件的

然而,我在JEP261中找不到这句话。它看起来来自于规范的旧版本,至少,我在(与JEP相关的问题)的历史中发现了类似的措辞

这意味着您目前应该能够通过使用任何允许读取ZIP文件的api来读取JMOD文件。例如,您可以使用以下选项之一:

  • API:

    导入java.io.File;
    导入java.io.IOException;
    导入java.util.zip.ZipFile;
    公共班机{
    公共静态void main(字符串[]args)引发IOException{
    var jmodFile=新文件(args[0])。getAbsoluteFile();
    println(“在JMOD文件中列出条目:“+jmodFile”);
    try(var-zipFile=new-zipFile(jmodFile)){
    对于(var entries=zipFile.entries();entries.hasMoreElements();){
    System.out.println(entries.nextElement());
    }
    }
    }
    }
    
    注意:要阅读条目内容,请参阅

  • API:

    import java.io.IOException;
    导入java.nio.file.FileSystems;
    导入java.nio.file.Files;
    导入java.nio.file.Path;
    公共班机{
    公共静态void main(字符串[]args)引发IOException{
    var jmodFile=Path.of(args[0]).toAbsolutionPath().normalize();
    println(“在JMOD文件中列出条目:“+jmodFile”);
    try(var fileSystem=FileSystems.newFileSystem(jmodFile)){
    Files.walk(fileSystem.getRootDirectories().iterator().next())
    .forEachOrdered(System.out::println);
    }
    }
    }
    
    注意:要阅读条目的内容,请使用该类提供的多种方法之一

    注意:该方法是在Java 11中添加的,该方法是在Java 13中添加的。如果使用较旧版本的Java,请替换这些方法调用



  • 不过,我要重申:JMOD文件使用的格式没有文档记录,可能会在不通知的情况下更改。

    非常感谢,由ZipFile解决,由ZipInputStream解决。它不起作用