代码之家  ›  专栏  ›  技术社区  ›  Nikordaris

Perl:从Java.jar文件读取MANIFEST.MF文件

  •  1
  • Nikordaris  · 技术社区  · 14 年前

    Mail::Header 以分离清单中的属性。如果清单文件已经从jar中提取出来,那么这个方法就可以了,但是我正在尝试找出如何将清单提取到内存中,然后立即放入Header对象中。到目前为止,我的情况是:

    my $jarFile = "MyJar.jar";
    my &jar = Archive::Zip->new($jarFile);
    
    my $manifest = Archive::Zip::MemberRead->new($jar, "META-INF/MANIFEST.MF");
    
    my $header = Mail::Header->new;
    $header->read(????);
    
    print $header->get("Class-Path");
    

    我不知道使用哪个构造函数和/或哪个提取/读取函数来读取$manifest文件句柄(我是perl新手)

    1 回复  |  直到 14 年前
        1
  •  1
  •   daxim e.dan    14 年前

    MemberRead 真实的 IO::File 以兼容的方式(因此我们将其传递给 Mail::Header getlines method ),但没有。

    我们可以通过将文件内容临时存储在数组中来解决它的不兼容性。

    my @lines;
    {
        my $handle = Archive::Zip->new($jar_file)->memberNamed('META-INF/MANIFEST.MF')->readFileHandle;
        while (defined(my $line = $handle->getline)) { # even $_ doesn't work!! what a piece of camel dung
            push @lines, $line;
        }
    }
    
    my $headers = Mail::Header->new([@lines]);
    print $headers->get('Class-Path');