java多个文件压缩为一个包(实现zip格式文件压缩方法)
开发项目过程中,会用到很多工具类,这些就不需要自己花时间去实现了,可以到网上查符合自己要求类,节约时间,提高开发效率。
压缩工具类代码
public class ZipToFile {
public static final String ZIP_FILENAME = "C:\\XJPDA.zip";// 需要解压缩的文件名
public static final String ZIP_DIR = "D:\\wj\\Java图形用户界面的设计与实现相关源代码\\";// 需要压缩的文件夹
public static final String UN_ZIP_DIR = "C:\\";// 要解压的文件目录
public static final int BUFFER = 1024;// 缓存大小
/**
* zip压缩功能. 压缩baseDir(文件夹目录)下所有文件,包括子目录
*
* @throws Exception
*/
public static void zipFile(String baseDir, String fileName)
throws Exception {
List fileList = getSubFiles(new File(baseDir));
ZipOutputStream zos = new ZipOutputStream(
new FileOutputStream(fileName));
zos.setEncoding(System.getProperty("sun.jnu.encoding"));
ZipEntry ze = null;
byte[] buf = new byte[BUFFER];
int readLen = 0;
for (int i = 0; i < fileList.size(); i ) {
File f = (File) fileList.get(i);
ze = new ZipEntry(getAbsFileName(baseDir, f));
ze.setSize(f.length());
ze.setTime(f.lastModified());
zos.putNextEntry(ze);
InputStream is = new BufferedInputStream(new FileInputStream(f));
while ((readLen = is.read(buf, 0, BUFFER)) != -1) {
zos.write(buf, 0, readLen);
}
is.close();
}
zos.close();
}
public static void main(String[] args) {
try {
zipFile(ZIP_DIR, "D:\\zip\\Java图形用户界面的设计与实现相关源代码.zip");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 给定根目录,返回另一个文件名的相对路径,用于zip文件中的路径.
*
* @param baseDir
* java.lang.String 根目录
* @param realFileName
* java.io.File 实际的文件名
* @return 相对文件名
*/
private static String getAbsFileName(String baseDir, File realFileName) {
File real = realFileName;
File base = new File(baseDir);
String ret = real.getName();
while (true) {
real = real.getParentFile();
if (real == null)
break;
if (real.equals(base))
break;
else
ret = real.getName() "/" ret;
}
return ret;
}
/**
* 取得指定目录下的所有文件列表,包括子目录.
*
* @param baseDir
* File 指定的目录
* @return 包含java.io.File的List
*/
private static List getSubFiles(File baseDir) {
List ret = new ArrayList();
File[] tmp = baseDir.listFiles();
for (int i = 0; i < tmp.length; i ) {
if (tmp[i].isFile())
ret.add(tmp[i]);
if (tmp[i].isDirectory())
ret.addAll(getSubFiles(tmp[i]));
}
return ret;
}
/**
* 解压缩功能. 将ZIP_FILENAME文件解压到ZIP_DIR目录下.
*
* @throws Exception
*/
public static void upZipFile() throws Exception {
ZipFile zfile = new ZipFile(ZIP_FILENAME);
Enumeration zList = zfile.getEntries();
ZipEntry ze = null;
byte[] buf = new byte[1024];
while (zList.hasMoreElements()) {
ze = (ZipEntry) zList.nextElement();
if (ze.isDirectory()) {
File f = new File(ZIP_DIR ze.getName());
f.mkdir();
continue;
}
OutputStream os = new BufferedOutputStream(new FileOutputStream(
getRealFileName(ZIP_DIR, ze.getName())));
InputStream is = new BufferedInputStream(zfile.getInputStream(ze));
int readLen = 0;
while ((readLen = is.read(buf, 0, 1024)) != -1) {
os.write(buf, 0, readLen);
}
is.close();
os.close();
}
zfile.close();
}
/**
* 给定根目录,返回一个相对路径所对应的实际文件名.
*
* @param baseDir
* 指定根目录
* @param absFileName
* 相对路径名,来自于ZipEntry中的name
* @return java.io.File 实际的文件
*/
public static File getRealFileName(String baseDir, String absFileName) {
String[] dirs = absFileName.split("/");
File ret = new File(baseDir);
if (dirs.length > 1) {
for (int i = 0; i < dirs.length - 1; i ) {
ret = new File(ret, dirs[i]);
}
if (!ret.exists())
ret.mkdirs();
ret = new File(ret, dirs[dirs.length - 1]);
return ret;
}
return ret;
}
/**
* 给zip文件加密方法,需要下载EncryptZip.jar包
*
* @param zipDir
* 要加密的压缩文件
* @param EncryptZipFile
* 加密后文件
* @param password
*密码
*/
public static void encryptionFile(String zipDir,String EncryptZipFile,String password){
System.out.println("===== 加密 =====");
File file = new File(zipDir);
byte[] zipByte = ZipOutput.getEncryptZipByte(file.listFiles(), password);
FileUtils.writeByteFile(zipByte, new File(EncryptZipFile));
System.out.println("===== Encrypt Success =====");
//return "success";
}
}
以上,是我实际项目中用过的zip文件压缩工具类,仅供参考,有什么好的方法,可以评论区交流。
我是一名码龄10年的程序员,在这里会分享实在干货,让你少走弯路,成就精彩人生。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com