最近在搞解压缩的问题,发现了用java.util.zip 是可以解压压缩包,但是解压含有中文的压缩包就会报错。所以改用ant.jar来解决这个问题,代码如下:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import org.apache.tools.zip.ZipFile;
public class ZipFileList
{
public static final int DEFAULT_BUFFER = 1024 * 4;
public static long copy(InputStream aIn, OutputStream aOut, int aBufferSize)
throws IOException
{
byte[] buffer = new byte[aBufferSize];
int read = 0;
long totalBytes = 0;
while (-1 != (read = aIn.read(buffer)))
{
aOut.write(buffer, 0, read);
totalBytes += read;
}
return totalBytes;
}
public static long copy(InputStream aIn, OutputStream aOut)
throws IOException
{
return copy(aIn, aOut, DEFAULT_BUFFER);
}
public static void unzip1(File zipFileName, File outputDirectory)
throws Exception
{
ZipFile zf = null;
try
{
zf = new ZipFile(zipFileName,"GBK");
Enumeration en = zf.getEntries();
while (en.hasMoreElements())
{
org.apache.tools.zip.ZipEntry entry = (org.apache.tools.zip.ZipEntry) en
.nextElement();
System.out.println(entry.getName());
FileOutputStream out = null;
try
{
System.out.println(entry.isDirectory());
if (!entry.isDirectory())
{
File newFile = new File(outputDirectory,
entry.getName());
newFile.getParentFile().mkdirs();
out = new FileOutputStream(newFile);
copy(zf.getInputStream(entry), out);
}
}
catch (Exception io)
{
io.printStackTrace();
throw io;
}
finally
{
if (out != null) out.close();
}
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
if (zf != null) zf.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
public static void main(String[] args)
{
try
{
ZipFileList.unzip1(new File("F:/中文.zip"), new File("f:/a"));
}
catch (Exception e)
{
e.printStackTrace();
}
System.out.println("OK");
}
}
上面的代码已经经过测试没有问题。如有问题请留言。望多交流。