我必须解压缩一个zip数据包,这是通过一个URL地址。(URL和DataInputStream是正确的!)
private void unZipIt(File baseDir, DataInputStream dis, PipedOutputStream pos) throws ZipException
{
byte[] buffer = new byte[1024];
String fileName = "";
File newFile;
FileOutputStream fos = null;
try
{
ZipInputStream zis = new ZipInputStream(dis);
ZipEntry ze = zis.getNextEntry();
if(ze==null)
{
System.out.println("first zip entry is null");
}
while (ze != null)
{
System.out.println("zip entry is not null");
fileName = ze.getName();
newFile = new File(baseDir + File.separator + fileName);
if (isSavFile(fileName))
{
System.out.println(fileName + "is savfile");
new File(newFile.getParent()).mkdirs();
fos = new FileOutputStream(newFile);
int len;
while ((len = zis.read(buffer)) > 0)
{
fos.write(buffer, 0, len);
}
// fos.close();
}
ze = zis.getNextEntry();
}
zis.closeEntry();
zis.close();
// return true;
}
catch (IOException e)
{
// ex.printStackTrace();
log.error("unzipping '" + fileName + "'", e);
throw new ZipException(fileName, e);
// return false;
}
但是不可能得到任何zip条目。(第一个zip条目为空!)使用FileOutputStream,它可以完美地工作。考虑到效率问题,我不允许在PC上存储文件。
有人知道吗?
最有可能的问题是您如何获取作为dis
传递给unZipIt()
方法的输入流。
你不应该收到一个DataInputStream
,而是一个简单的InputStream
。ZipInputStream
不使用也不期望输入为DataInputStream
。
另外,当保存条目的内容时,您应该只读取(并保存)条目长度的字节数,直到有更多的字节。