有没有一种方法可以在Java中以编程方式读取.jmod文件?
我用7-zip打开了一个.jmod文件,可以看到其中的内容。我试图用ZipInputStream以编程方式阅读它,但它不起作用:有人知道怎么做吗?没有关于JMOD文件使用格式的文档。据我所知,这不是一个疏忽,因为将格式作为一个实现细节,意味着他们可以随时更改格式,而无需通知。也就是说,目前JMOD文件似乎是以ZIP格式打包的;引用JEP261的以下内容: JMOD文件的最终格式是一个悬而未决的问题,但目前它是基于ZIP文件的 然而,我在JEP261中找不到这句话。它看起来来自于规范的旧版本,至少,我在(与JEP相关的问题)的历史中发现了类似的措辞 这意味着您目前应该能够通过使用任何允许读取ZIP文件的api来读取JMOD文件。例如,您可以使用以下选项之一:有没有一种方法可以在Java中以编程方式读取.jmod文件?,java,module,zip,zipinputstream,Java,Module,Zip,Zipinputstream,我用7-zip打开了一个.jmod文件,可以看到其中的内容。我试图用ZipInputStream以编程方式阅读它,但它不起作用:有人知道怎么做吗?没有关于JMOD文件使用格式的文档。据我所知,这不是一个疏忽,因为将格式作为一个实现细节,意味着他们可以随时更改格式,而无需通知。也就是说,目前JMOD文件似乎是以ZIP格式打包的;引用JEP261的以下内容: JMOD文件的最终格式是一个悬而未决的问题,但目前它是基于ZIP文件的 然而,我在JEP261中找不到这句话。它看起来来自于规范的旧版本,至少
导入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());
}
}
}
}
注意:要阅读条目内容,请参阅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解决。它不起作用