我现在想用java写一个压缩的应用!!!
将一文件夹下的所有文件夹(所有文件夹下都有很多文件)进行压缩。
请问各位用java怎样实现的呢?我百度了一下,但很多都是关于将文件压缩的,而不是将文件夹下所有的文件压缩的!急呀!先谢谢了!
将一文件夹下的所有文件夹(所有文件夹下都有很多文件)进行压缩。
请问各位用java怎样实现的呢?我百度了一下,但很多都是关于将文件压缩的,而不是将文件夹下所有的文件压缩的!急呀!先谢谢了!
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;public class Test { static final int BUFFER = 2048; public static void main(String[] args) throws IOException {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("f:/yx.zip"));
ZipOutputStream out = new ZipOutputStream(bos);
// f:/yx 是一个目录,下面有一些文件和目录
File f = new File("f:/yx");
put(f, out, "");
out.close();
System.out.println("OK");
} public static void put(File f, ZipOutputStream out, String dir) throws IOException {
if (f.isDirectory()) {
File[] files = f.listFiles();
dir = dir + (dir.length() == 0 ? "" : "/") + f.getName();
for (File file : files) {
put(file, out, dir);
}
} else {
byte[] data = new byte[BUFFER];
FileInputStream fi = new FileInputStream(f);
BufferedInputStream origin = new BufferedInputStream(fi, BUFFER);
dir = dir.length() == 0 ? "" : dir + "/" + f.getName();
ZipEntry entry = new ZipEntry(dir);
out.putNextEntry(entry);
int count;
while ((count = origin.read(data, 0, BUFFER)) != -1) {
out.write(data, 0, count);
}
origin.close();
}
}
}API 问题,不能存在中文目录和文件名,否则会现目录/文件名乱码。
import java.util.zip.ZipOutputStream;替换成:import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;其他的不变,就可以支持中文了,类库在 ant.jar 中,做 Java 的应该每台机器都有,里面还有 tar 的压缩工具包。
java.util.zip.ZipException: ZIP file must have at least one entry