用java写压缩文件夹
我现在想用java写一个压缩的应用!!!
将一文件夹下的所有文件夹(所有文件夹下都有很多文件)进行压缩。
请问各位用java怎样实现的呢?
我百度了一下,但很多都是关于将文件压缩的,而不是将文件夹下所有的文件压缩的!
急呀!先谢谢了!
------解决方案--------------------压缩文件与压缩文件夹在本质上是一样的。压缩文件夹的关键在于递归的调用。保证输出流是一直打开的。输入流中若为文件则写到输出流中,若为文件夹则遍历文件夹中的各个文件名,若为文件则写到输出流中,若为文件夹则继续递归调用。
------解决方案--------------------写什么啊...直接用rar不久行了...
最新的rar3.7Final dos下的才324k
你用加密压缩,然后改下后缀名不就成你自己的了?
------解决方案--------------------import java.io.BufferedInputStream;
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.ZipEntry;
import java.util.zip.ZipOutputStream;
替换成:
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
其他的不变,就可以支持中文了,类库在 ant.jar 中,做 Java 的应该每台机器都有,里面还有 tar 的压缩工具包。