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.Enumeration;
import java.util.Vector;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
public class Zip {
private static final int BUFFER = 1024; // Length of buffer
private long length = 0; // A uncompress directory's length
/**
* Compress files to *.zip.
* @param fileName: file to be compress
*/
public void compress(String fileName) {
String targetFile = null;
File sourceFile = new File(fileName);
Vector<File> vector = getAllFiles(sourceFile);
try {
if (sourceFile.isDirectory()) {
targetFile = fileName + ".zip";
} else {
char ch = '.';
targetFile = fileName.substring(0, fileName.lastIndexOf((int)ch)) + ".zip";
}
BufferedInputStream bis = null;
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(targetFile));
ZipOutputStream zipos = new ZipOutputStream(bos);
byte data[] = new byte[BUFFER];
for (int i=0; i<vector.size(); i++) {
File file = (File)vector.get(i);
zipos.putNextEntry(new ZipEntry(getEntryName(fileName, file)));
bis = new BufferedInputStream(new FileInputStream(file));
int count;
while ((count=bis.read(data, 0, BUFFER)) != -1 ) {
zipos.write(data, 0, count);
}
bis.close();
zipos.closeEntry();
}
zipos.close();
bos.close();
showDetail(sourceFile, new File(targetFile));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Uncompress *.zip files.
* @param fileName: file to be uncompress
*/
public void uncompress(String fileName) {
File sourceFile = new File(fileName);
String filePath = sourceFile.getParent() + "/";
try {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
ZipFile zipFile = new ZipFile(fileName);
Enumeration en = zipFile.entries();
byte data[] = new byte[BUFFER];
while (en.hasMoreElements()) {
ZipEntry entry = (ZipEntry)en.nextElement();
if (entry.isDirectory()) {
new File(filePath + entry.getName()).mkdirs();
continue;
}
bis = new BufferedInputStream(zipFile.getInputStream(entry));
File file = new File(filePath + entry.getName());
File parent = file.getParentFile();
if (parent!=null && (!parent.exists())) {
parent.mkdirs();
}
bos = new BufferedOutputStream(new FileOutputStream(file));
int count;
while ((count=bis.read(data, 0, BUFFER)) != -1) {
bos.write(data, 0, count);
}
bis.close();
bos.close();
}
zipFile.close();
} catch(IOException e) {
e.printStackTrace();
}
}
/**
* To get a directory's all files.
* @param sourceFile: the source directory
* @return the files' collection
*/
private Vector<File> getAllFiles(File sourceFile) {
Vector<File> fileVector = new Vector<File>();
if (sourceFile.isDirectory()) {
File[] files = sourceFile.listFiles();
for (int i=0; i<files.length; i++) {
fileVector.addAll(getAllFiles(files[i]));
}
} else {
fileVector.add(sourceFile);
}
return fileVector;
}
private String getEntryName(String base,File file) {
File baseFile=new File(base);
String filename=file.getPath();
if(baseFile.getParentFile().getParentFile()==null)
return filename.substring(baseFile.getParent().length());
return filename.substring(baseFile.getParent().length()+1);
}
/**
* Show the compress or uncompress detail.
* @param sourceFile: the source file
* @param targetFile: the target file
*/
private void showDetail(File sourceFile, File targetFile) {
long sourceFileLength = getDirectoryLength(sourceFile);
long targetFileLength = targetFile.length();
System.out.println("The uncompress file's size is " + sourceFileLength + " bytes.");
System.out.println("The compress file's size is " + targetFileLength + " bytes.");
System.out.println("The compress rate is " + ((double)(sourceFileLength-targetFileLength)/(double)sourceFileLength)*100 + "%");
}
/**
* Get length of a directory.
* @param path: the directory
* @return the length of directory
*/
private long getDirectoryLength(File path) {
if (path.isDirectory()) {
File[] files = path.listFiles();
for (int i=0; i<files.length; i++) {
getDirectoryLength(files[i]);
}
} else {
length += path.length();
}
return length;
}
public static void main(String[] args) {
// if (args.length != 2) {
// System.out.println("Usage: java ZipCompress zip/unzip E:/java/apps/zip/text");
// return ;
// }
// Zip zip = new Zip();
// if (args[0].equals("zip")) {
// zip.compress(args[1]);
// } else if(args[0].equals("unzip")) {
// zip.uncompress(args[1]);
// } else {
// System.out.println("Error");
// }
Zip zip = new Zip();
zip.compress("E:/delete/20100422/单向接口");
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
Main.rar (10个子文件)
.project 590B
bin
ZipUtil.class 3KB
Zip.class 5KB
UnZip.class 3KB
.settings
org.eclipse.jdt.core.prefs 629B
src
UnZip.java 3KB
Zip.java 6KB
ZipUtil.java 3KB
.classpath 281B
ant1.7.jar 1.23MB
共 10 条
- 1
资源评论
- lyong88302011-09-17讲的大多是原理,而且是通信和语音图像之类的,书还不错,就是跟我需要的东西不太对路
- dowellno12012-11-07通信和语音图像之类的书不错,是我需要的东西
- anpire2011-12-24对apache tools不熟悉,我用eclipse不能运行。
Star_of_Java
- 粉丝: 13
- 资源: 137
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功