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

user12801918:

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

色拉:

有中没有文档JEP 261:模块系统有关的JMOD文件中使用的格式。据我所知,这不是疏忽,因为将格式保留为实现细节意味着他们可以随时更改格式,而无需另行通知。话虽如此,目前JMOD文件似乎以ZIP格式打包;这个其他答案引用了JEP 261的以下内容

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

但是,我在JEP 261的任何地方都找不到该报价它似乎来自规范的较旧版本-至少,我在JDK-8061972(与JEP相关的问题)的历史中发现了类似的措辞

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

  1. java.util.zipAPI:

    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文件使用的格式未记录在案,如有更改,恕不另行通知。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有办法获取Java文件/行号?

为什么Java 9引入了JMOD文件格式?

有没有办法在一个Java8流中读取两个或更多文件?

有没有办法读取clojure文件中的所有表格?

有没有办法从大于long long int的文件中读取数字?

有没有办法在python中没有节头的情况下读取/写入配置文件?

有没有办法在python中追加和读取文本文件?

有没有办法用openpyxl读取没有工作簿的Excel文件?

有没有办法以编程方式将R源代码保存到文件中?

有没有办法读取统一资产MonoBehaviour.txt文件?

在使用c ++读取文件时,有没有办法忽略文件字符的结尾?

有没有办法关闭python中没有文件对象的文件?

有没有办法在Rails中读取Wordpress导出文件?

有没有办法从终端中的文件末尾向后读取字符?

有没有办法读取OSX .numbers文件?

有没有办法以编程方式更改布局文件?

有没有办法读取python文件来分区文本文件?

有没有办法以编程方式将 ttl 文件上传到 Fuseki?

有没有办法使用 Python 使用 open 反向读取文件

有没有办法从文件中读取转义字符并正确处理它们

有没有办法从 ASC 文件中逐行读取并在特定子字符串之后检查它?

有没有办法在不关闭 Windows 10 中的文件资源管理器的情况下以编程方式关闭控制面板?

有没有办法读取语言配置文件并将其转换为对象?

有没有办法从我在 Python 中中断的地方读取文件?

有没有办法在fortran中读取文件的一部分?

有没有办法使用 Selenium 或其他一些 Java API 以编程方式创建新的命名 Firefox 配置文件?

有没有办法使用 java 1.8 不使用 byte[ ] 或 readAllBytes() 来读取 PDF 文件流

有没有办法读取 .txt 文件并将值存储为字典中的列表?

有没有办法使用 DriveApp 读取 .odt 文件并将其加载到变量中