如何在java中生成ZipFile

如何在java中生成ZipFile,java,webservice-client,fileinputstream,fileoutputstream,zipinputstream,Java,Webservice Client,Fileinputstream,Fileoutputstream,Zipinputstream,我不熟悉使用流。我正在尝试在我的应用程序中使用httpClient下载zipfile。当我下载zip文件时,我从客户端获得了成功的完整响应。通过响应,我正在尝试使用inputstream在本地文件夹中生成zipfile。我可以生成zip文件,但没有内容。可以吗谁来帮帮我。下面是我的代码片段 String url = CONTANTS.SERVER_LOCATION+"Download/Test/"+ "sudhakar_test.zip"; HttpGet getRequest =

我不熟悉使用流。我正在尝试在我的应用程序中使用httpClient下载zipfile。当我下载zip文件时,我从客户端获得了成功的完整响应。通过响应,我正在尝试使用inputstream在本地文件夹中生成zipfile。我可以生成zip文件,但没有内容。可以吗谁来帮帮我。下面是我的代码片段

   String url = CONTANTS.SERVER_LOCATION+"Download/Test/"+ "sudhakar_test.zip";
   HttpGet getRequest = new HttpGet(url);
   CloseableHttpClient httpClient =HttpClientBuilder.create().build();
   try (
          CloseableHttpResponse response = httpClient.execute(getRequest);
          InputStream fileInput = response.getEntity().getContent();
          ZipInputStream zipInput = new ZipInputStream (fileInput);
          FileOutputStream output = new FileOutputStream(new File(fileLocation 
          +"/SudhakarZIP_Test.zip"));
        )
          {
            if (response.getStatusLine().getStatusCode() == 200)
             {          
              byte[] buffer = new byte[1024];
              int length;
              while((length = zipInput.read(buffer,0,buffer.length)) >0)
               {
                    output.write(buffer,0,length);
               }
        } 

您至少需要从ZIP流中调用
getNextEntry
,以获取任何有意义的内容,因为
ZipInputStream
正在读取整个归档文件,而不是单个文件。如果您没有读取条目,则流可能不会返回任何字节


您可以解压流,也可以直接将其写入文件,在这种情况下,您根本不需要
ZipInputStream

如果省略
ZipInputStream
,直接使用内容的
InputStream
,会发生什么?那你有什么收获吗?我认为您至少需要从ZIP流中调用
getnextery
,以获取任何有意义的内容,因为
ZipInputStream
正在读取整个归档文件,而不是单个文件。这就是答案,不是吗?提示:如果您的唯一目的是将流保存到文件,则不需要使用
ZipInputStream
。您应该省略
zipInput
,直接使用
fileInput
。Marteen,下面两行代码已经将zip文件下载为inputstream,但我的目标是在本地生成包含下载内容的zip文件。CloseableHttpResponse response=httpClient.execute(getRequest);InputStream fileInput=response.getEntity().getContent();首先生成zip文件和从远程服务器下载zip文件是完全不同的事情。此外,Marteen应该对你们的问题投否决票,因为你们并没有从网上阅读任何内容,你们的问题也不清楚。