日期:2014-05-20  浏览次数:20855 次

高分求解:java解压zip文件问题!!!!!
下面这个函数是我写的一个解压文件用的。
但是在用的过程中出现了一个问题。
部分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();
}
}

------解决方案--------------------
以前我写过,现在忘记了,我找找哦
------解决方案--------------------
byte data[]=new byte[8192];
是不是设置的太小了