你可以使用java.util.zip.ZipOutputStream来完成
private static void zipDir(String prefix, File srcDir, ZipOutputStream zip)
throws IOException { File[] files = srcDir.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory())
zipDir(prefix + "/" + files[i].getName(), files[i], zip);
else {
FileInputStream fis = new FileInputStream(files[i]);
ZipEntry entry =
new ZipEntry(prefix + "/" + files[i].getName());
zip.putNextEntry(entry);
byte[] buf = new byte[1024];
for (int readed = fis.read(buf);readed >= 0; readed = fis.read(buf))
zip.write(buf, 0, readed);
zip.closeEntry();
fis.close();
}
}
}
private static void zipDir(String prefix, File srcDir, ZipOutputStream zip)
throws IOException { File[] files = srcDir.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory())
zipDir(prefix + "/" + files[i].getName(), files[i], zip);
else {
FileInputStream fis = new FileInputStream(files[i]);
ZipEntry entry =
new ZipEntry(prefix + "/" + files[i].getName());
zip.putNextEntry(entry);
byte[] buf = new byte[1024];
for (int readed = fis.read(buf);readed >= 0; readed = fis.read(buf))
zip.write(buf, 0, readed);
zip.closeEntry();
fis.close();
}
}
}
反正一个文件用这两个一个压缩一个解压出来的结果和原来不一致!
public static void extract(File zipf, File dir) throws ZipException,
IOException
{
if (!dir.exists())
{
dir.mkdirs();
}
ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipf));
ZipEntry zipEntry;
while ( (zipEntry = zipIn.getNextEntry()) != null)
{
System.out.println(zipEntry.getName());
File aimf = new File(dir, zipEntry.getName());
if (zipEntry.isDirectory())
{
aimf.mkdirs();
continue;
}
FileOutputStream aimOut = new FileOutputStream(aimf);
byte[] buf = new byte[1024];
int offs;
while ( (offs = zipIn.read(buf)) != -1)
{
aimOut.write(buf, 0, offs);
}
aimOut.close();
zipIn.closeEntry();
}
zipIn.close();
}
只需要在你File aimf = new File(dir, zipEntry.getName());之后
aimf.getParent().mkdirs()也就可以了
aimf.getParent.mkdirs() 应该改为:aimf.getParentFile.mkdirs();