解压 汉语压缩包 和压缩包内有中文文件的代码
解压 中文压缩包 和压缩包内有中文文件的代码
最近在搞解压缩的问题,发现了用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"); } }
上面的代码已经经过测试没有问题。如有问题请留言。望多交流。