使用java自带的类 java.util.zip进行文件/目录的压缩的话,有一点不足,不支持中文的文件/目录命名,如果有中文名,那么打包就会失败。在ant.jar类库中也有zip类,引入 org.apache.tools.zip.*,能够解决不支持中文文件目录的问题,同时,ant的获得途径也比较多,一般的应用服务器中有这个包,如果没有去下载个tomcat5.x,里面也有ant.jar,可以使用。
例子如下:
import java.io.file;
import org.apache.tools.zip.zipoutputstream;
import java.io.fileinputstream;
import java.io.fileoutputstream;
public class compressbook {
public compressbook() {
}
public void zip(string inputfilename) throws exception {
string zipfilename="c:\\test.zip";//打包后文件名字
system.out.println(zipfilename);
zip(zipfilename, new file(inputfilename));
}
private void zip(string zipfilename, file inputfile)
throws exception {
zipoutputstream out = new zipoutputstream(
new fileoutputstream(zipfilename));
zip(out, inputfile, "");
system.out.println("zip done");
out.close();
}
private void zip(zipoutputstream out, file f, string base)
throws exception {
if (f.isdirectory()) {
file[] fl = f.listfiles();
out.putnextentry(new org.apache.tools.zip.zipentry(base + "/"));
base = base.length() == 0 ? "" : base + "/";
for (int i = 0; i < fl.length; i++) {
zip(out, fl[i], base + fl[i].getname());
}
}
else {
out.putnextentry(new org.apache.tools.zip.zipentry(base));
fileinputstream in = new fileinputstream(f);
int b;
system.out.println(base);
while ( (b = in.read()) != -1) {
out.write(b);
}
in.close();
}
}
}
|