gpt4 book ai didi

java - 有没有办法以编程方式读取 Java 中的 .jmod 文件?

转载 作者:行者123 更新时间:2023-12-02 09:02:09 25 4
gpt4 key购买 nike

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

最佳答案

JEP 261: Module System中没有文档关于 JMOD 文件使用的格式。据我所知,这不是一个疏忽,因为将格式保留为实现细节意味着他们可以随时更改格式,恕不另行通知。话虽如此,目前 JMOD 文件似乎是以 ZIP 格式打包的; this other answer引用JEP 261中的以下内容:

The final format of JMOD files is an open issue, but for now it is based on ZIP files.

但是,我在JEP 261中找不到这句话。它看起来来自该规范的旧版本——至少,我在JDK-8061972的历史中发现了类似的措辞。 (与 JEP 相关的问题)。

这意味着您暂时应该能够使用任何允许读取 ZIP 文件的 API 来读取 JMOD 文件。例如,您可以使用以下其中一项:

  1. java.util.zip API:

    import java.io.File;
    import java.io.IOException;
    import java.util.zip.ZipFile;

    public class Main {

    public static void main(String[] args) throws IOException {
    var jmodFile = new File(args[0]).getAbsoluteFile();
    System.out.println("Listing entries in JMOD file: " + jmodFile);

    try (var zipFile = new ZipFile(jmodFile)) {
    for (var entries = zipFile.entries(); entries.hasMoreElements(); ) {
    System.out.println(entries.nextElement());
    }
    }
    }
    }

    注意:要阅读条目的内容,请参阅 ZipFile#getInputStream(ZipEntry) .

  2. ZIP FileSystemProvider API:

    import java.io.IOException;
    import java.nio.file.FileSystems;
    import java.nio.file.Files;
    import java.nio.file.Path;

    public class Main {

    public static void main(String[] args) throws IOException {
    var jmodFile = Path.of(args[0]).toAbsolutePath().normalize();
    System.out.println("Listing entries in JMOD file: " + jmodFile);

    try (var fileSystem = FileSystems.newFileSystem(jmodFile)) {
    Files.walk(fileSystem.getRootDirectories().iterator().next())
    .forEachOrdered(System.out::println);
    }
    }
    }

    注意:要读取条目的内容,请使用 java.nio.file.Files 提供的众多方法之一。类。

    注意:Path#of(String,String...) Java 11 和 FileSystems#newFileSystem(Path) 中添加了方法Java 13 中添加了该方法。如果使用旧版本的 Java,请替换这些方法调用。

<小时/>

但是要重申:JMOD 文件使用的格式没有记录,并且可能会更改,恕不另行通知。

关于java - 有没有办法以编程方式读取 Java 中的 .jmod 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60082530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com