在Java中重新创建目录结构并从zip文件的字节数组中提取文件

在Java中重新创建目录结构并从zip文件的字节数组中提取文件,java,file,zip,Java,File,Zip,我有一个zip文件的字节数组,我需要从中创建zip文件,然后解压缩其中的文件和文件夹 我尝试这样做,但得到的zip条目为空 { ResponseEntity<byte[]> result = restTemplate.exchange(builder.build().toString(), HttpMethod.GET, httpEntity, byte[].class); ZipInputStream zipStream = new ZipInputStream(new B

我有一个zip文件的字节数组,我需要从中创建zip文件,然后解压缩其中的文件和文件夹

我尝试这样做,但得到的zip条目为空

{
ResponseEntity<byte[]> result = restTemplate.exchange(builder.build().toString(), HttpMethod.GET, httpEntity, byte[].class);
    ZipInputStream zipStream = new ZipInputStream(new ByteArrayInputStream(result.getBody()))
    ZipEntry entry = null;
    while ((entry = zipStream.getNextEntry()) != null)
}
{
ResponseEntity result=restemplate.exchange(builder.build().toString(),HttpMethod.GET,httpEntity,byte[].class);
ZipInputStream zipStream=新的ZipInputStream(新的ByteArrayInputStream(result.getBody()))
ZipEntry条目=null;
while((entry=zipStream.getnextery())!=null)
}
Zip文件类似于

  • 目录->b.txt
  • DIR->x.php,a.txt

提前感谢

好的,我成功地以编程方式下载了上述链接的文件:

        List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
        acceptableMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);
        HttpHeaders headers = new HttpHeaders();
        headers.setAccept(acceptableMediaTypes);
        RestTemplate restTemplate = new RestTemplate();
        HttpEntity<String> httpEntity = new HttpEntity<String>(headers);
        ResponseEntity<byte[]> result = restTemplate.exchange( "someurl deleted On purpose",
                                                               HttpMethod.GET,
                                                               httpEntity,
                                                               byte[].class );

        ZipInputStream zipStream = new ZipInputStream(new ByteArrayInputStream(result.getBody()));
        ZipEntry entry = null;
        while ((entry = zipStream.getNextEntry()) != null)
        {
            System.out.println( "entry: " + entry );
        }

因此,您可能无法请求正确的媒体类型,或者URL编码不正确。

如何获取这些字节?此外,还应包括尝试获取ZipEntry的代码。{ResponseEntity result=restTemplate.exchange(builder.build().toString(),HttpMethod.GET,httpEntity,byte[].class);ZipInputStream zipStream=new ZipInputStream(new ByteArrayInputStream(result.getBody()))ZipEntry条目=null;而((entry=zipStream.getnextery())!=null)}通过rest templateIf result.getBody()获取这些字节返回表示正确zip内容的字节数组,然后您的代码也将正确提取zip条目。您的问题似乎是接收到的字节数组不正确。因此,您的问题归结为有关通过REST框架接收正确字节数组的问题。是的,这是一个有效的zip文件。请下载它手动并将其直接馈送到ZipInputStream会产生有效的结果。您的问题是如何以编程方式获取此文件的内容。由于您没有提供有关所用REST客户端框架的任何信息,我无法提供更多帮助。是spring吗?谢谢@Heri我想我没有使用MediaTypes,那么请为我的回答,或者选择正确的,我已经投了赞成票,但是没有足够的分数。因此,反对票不可见
entry: bridge2cart/
entry: bridge2cart/config.php
entry: bridge2cart/bridge.php
entry: readme.txt