下面这个函数是我写的一个解压文件用的。
但是在用的过程中出现了一个问题。
部分zip文件不能正常解压,获得的ZipEntry为空。而这些文件确可以用rar解压。求各位同仁,有其它方法吗?
private void unzipFile()throws Exception
{
File zipfile= new File("D:\\sjhk\\zipDir");//此文件夹下放的为一些zip文件
File [] zipFiles=zipfile.listFiles();
myLog.info("开始解压文件"+zipFiles.length+"个文件");
for(int i=0;i<zipFiles.length;i++)
{
myLog.info("开始解压"+zipFiles[i].getName()+"文件。");
if(!zipFiles[i].getName().endsWith(".zip"))continue;
ZipInputStream zipIs=new ZipInputStream(new FileInputStream(zipFiles[i]));
ZipEntry zipEntry=zipIs.getNextEntry(); 
myLog.info("进入循环1");
while(zipEntry!=null)
{
myLog.info("进入循环2");
//基于被压缩文件创建同名的目标文件;
String fileName=zipEntry.getName();
//写入文件内容
FileOutputStream fileOs=null;
try
{
byte data[]=new byte[8192];
fileOs=new FileOutputStream(desFile);
int readCount=zipIs.read(data);
while(readCount>0)
{
fileOs.write(data,0,readCount);
readCount=zipIs.read(data);
}
fileOs.flush();
fileOs.close();
}
catch(Exception e)
{
fileOs.flush();
fileOs.close();
desFile.delete();
myLog.error("提取文件"+fileName+"失败"+e);
}
//解压下一个文件
myLog.info("解压"+fileName+"文件成功。");
zipIs.closeEntry();
zipEntry=zipIs.getNextEntry();
}
zipIs.close();
zipFiles[i].delete();
}
}