如何在java中生成ZipFile
我不熟悉使用流。我正在尝试在我的应用程序中使用httpClient下载zipfile。当我下载zip文件时,我从客户端获得了成功的完整响应。通过响应,我正在尝试使用inputstream在本地文件夹中生成zipfile。我可以生成zip文件,但没有内容。可以吗谁来帮帮我。下面是我的代码片段如何在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 =
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应该对你们的问题投否决票,因为你们并没有从网上阅读任何内容,你们的问题也不清楚。