我必须解压缩通过URL寻址的zip数据包。 (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上。
有人有想法吗?
答案 0 :(得分:0)
最有可能的问题是您如何获取以dis
方式传递给unZipIt()
方法的输入流。
您不应该收到DataInputStream
而是简单的InputStream
。 ZipInputStream
不使用也不期望输入为DataInputStream
。
同样在保存条目内容时,您应该只读取(并保存)与条目长度一样多的字节,而不是直到有更多字节。