下面这个函数是我写的一个解压文件用的。
但是在用的过程中出现了一个问题。
部分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];
是不是设置的太小了