年底了,心情不免浮躁,今天抽出了一个ZIP文件压缩功能,本地试验了下很强大,在这里分享一下:
很简单一个工具类 一个测试类
工具类Utils代码如下 :
package com.tyzs.util;
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 Utils {
public static void zipFile(String baseDirName,
String fileName,
String
targetFileName) {
File baseDir = new
File(baseDirName);// 获得根目录 File
// 判断此目录是否存在
此目录是否是一个文件类型的目录
if (!baseDir.exists() ||
(!baseDir.isDirectory())) {
return;
}
String baseDirPath =
baseDir.getAbsolutePath(); // 返回此路径的绝对路径名
// 目标文件
File targetFile = new
File(targetFileName);
try {
//
创建一个ZIP输出流来压缩数据并写入到ZIP文件
ZipOutputStream
out = new ZipOutputStream(new FileOutputStream(targetFile));
if
(fileName.equals("*")) {
//
将baseDir目录下的所有文件压缩到ZIP
dirToZip(baseDirPath,
baseDir, out);
} else
{
File
file = new File(baseDir, fileName);
if
(file.isFile()) {
fileToZip(baseDirPath,
file, out);
}
else {
dirToZip(baseDirPath,
file, out);
}
}
out.close();
System.out.println("压缩文件成功,目标文件名:"
+ targetFileName);
} catch (Exception e) {
System.out.println("压缩失败:"
+ e);
e.printStackTrace();
}
}
private static void dirToZip(String baseDirPath,
File dir,
ZipOutputStream
out) {
if (dir.isDirectory()) {
//
列出DIR目录下所有文件
File[] files
= dir.listFiles();
//
如果是空文件夹
if
(files.length == 0) {
ZipEntry
entry = new ZipEntry(getEntryName(baseDirPath, dir));
//
存储目录信息
try
{
out.putNextEntry(entry);
out.closeEntry();
}
catch (IOException e) {
e.printStackTrace();
}
return;
}
for (int i =
0; i < files.length; i++) {
if
(files[i].isFile()) {
//
如果是文件,调用fileToZip方法
fileToZip(baseDirPath,
files[i], out);
}
else {
//
如果是目录,递归调用
dirToZip(baseDirPath,
files[i], out);
}
}
}
}
private static void fileToZip(String baseDirPath,
File file,
ZipOutputStream
out) {
FileInputStream in =
null;
ZipEntry entry = null;
// 创建复制缓冲区
byte[] buffer = new
byte[4096];
int bytes_read;
if (file.isFile()) {
try {
//
创建一个文件输入流
in
= new FileInputStream(file);
//
做一个ZipEntry
entry
= new ZipEntry(getEntryName(baseDirPath, file));
//
存储项信息到压缩文件
out.putNextEntry(entry);
//
复制字节到压缩文件
while
((bytes_read = in.read(buffer)) != -1) {
out.write(buffer,
0, bytes_read);
}
out.closeEntry();
in.close();
System.out.println("添加文件"
+ file.getAbsolutePath()
+
"被到ZIP文件中!");
} catch
(IOException e) {
e.printStackTrace();
}
}
}
private static String getEntryName(String
baseDirPath, File file) {
if
(!baseDirPath.endsWith(File.separator)) {
baseDirPath
+= File.separator;
}
String filePath =
file.getAbsolutePath();
//
对于目录,必须在entry名字后面加上"/",表示它将以目录项存储。
if (file.isDirectory()) {
filePath +=
"/";
}
int index =
filePath.indexOf(baseDirPath);
return filePath.substring(index
+ baseDirPath.length());
}
}
本地测试类TEST:
package com.tyzs;
import com.tyzs.util.Utils;
public class RunMain {
public static void main(String[] args) {
String
baseDirName="D:/";//根目录
String fileName="test";
//根目录下的文件夹 如果为*刚表示 压缩 根目录
下的所有文件
String
targetFileName="D:/test.zip"; //目标路径
Utils.zipFile(baseDirName,
fileName, targetFileName);
}
}
效果如下图:
http://s11/mw690/002Ff7YUgy6PLprKA4y0a&690实现 ZIP压缩" TITLE="JAVA 实现 ZIP压缩" />
查看压缩后的文件: 如果是LINUX
请注意下生产目录
http://s7/mw690/002Ff7YUgy6PLprUNRcb6&690实现 ZIP压缩" TITLE="JAVA 实现 ZIP压缩" />
最后,新年快乐!!!
抟摇直上 2015-02-06
加载中,请稍候......