展开全部

有三种方式实现java压缩:

1、jdk自带的包java.util.zip.ZipOutputStream,不足之处,文件(夹)名称32313133353236313431303231363533e59b9ee7ad9431333363393666带中文时,出现乱码问题,实现代码如下:

/**

* 功能:把 sourceDir 目录下的所有文件进行 zip 格式的压缩,保存为指定 zip 文件

* @param sourceDir 如果是目录,eg:D:\\MyEclipse\\first\\testFile,则压缩目录下所有文件;

* 如果是文件,eg:D:\\MyEclipse\\first\\testFile\\aa.zip,则只压缩本文件

* @param zipFile 最后压缩的文件路径和名称,eg:D:\\MyEclipse\\first\\testFile\\aa.zip

*/

public File doZip(String sourceDir, String zipFilePath) throws IOException {

File file = new File(sourceDir);

File zipFile = new File(zipFilePath);

ZipOutputStream zos = null;

try {

// 创建写出流操作

OutputStream os = new FileOutputStream(zipFile);

BufferedOutputStream bos = new BufferedOutputStream(os);

zos = new ZipOutputStream(bos);

String basePath = null;

// 获取目录

if(file.isDirectory()) {

basePath = file.getPath();

}else {

basePath = file.getParent();

}

zipFile(file, basePath, zos);

}finally {

if(zos != null) {

zos.closeEntry();

zos.close();

}

}

return zipFile;

}

/**

* @param source 源文件

* @param basePath

* @param zos

*/

private void zipFile(File source, String basePath, ZipOutputStream zos)

throws IOException {

File[] files = null;

if (source.isDirectory()) {

files = source.listFiles();

} else {

files = new File[1];

files[0] = source;

}

InputStream is = null;

String pathName;

byte[] buf = new byte[1024];

int length = 0;

try{

for(File file : files) {

if(file.isDirectory()) {

pathName = file.getPath().substring(basePath.length() + 1) + "/";

zos.putNextEntry(new ZipEntry(pathName));

zipFile(file, basePath, zos);

}else {

pathName = file.getPath().substring(basePath.length() + 1);

is = new FileInputStream(file);

BufferedInputStream bis = new BufferedInputStream(is);

zos.putNextEntry(new ZipEntry(pathName));

while ((length = bis.read(buf)) > 0) {

zos.write(buf, 0, length);

}

}

}

}finally {

if(is != null) {

is.close();

}

}

}

2、使用org.apache.tools.zip.ZipOutputStream,代码如下,

package net.szh.zip;

import java.io.BufferedInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.util.zip.CRC32;

import java.util.zip.CheckedOutputStream;

import org.apache.tools.zip.ZipEntry;

import org.apache.tools.zip.ZipOutputStream;

public class ZipCompressor {

static final int BUFFER = 8192;

private File zipFile;

public ZipCompressor(String pathName) {

zipFile = new File(pathName);

}

public void compress(String srcPathName) {

File file = new File(srcPathName);

if (!file.exists())

throw new RuntimeException(srcPathName + "不存在!");

try {

FileOutputStream fileOutputStream = new FileOutputStream(zipFile);

CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,

new CRC32());

ZipOutputStream out = new ZipOutputStream(cos);

String basedir = "";

compress(file, out, basedir);

out.close();

} catch (Exception e) {

throw new RuntimeException(e);

}

}

private void compress(File file, ZipOutputStream out, String basedir) {

/* 判断是目录还是文件 */

if (file.isDirectory()) {

System.out.println("压缩:" + basedir + file.getName());

this.compressDirectory(file, out, basedir);

} else {

System.out.println("压缩:" + basedir + file.getName());

this.compressFile(file, out, basedir);

}

}

/** 压缩一个目录 */

private void compressDirectory(File dir, ZipOutputStream out, String basedir) {

if (!dir.exists())

return;

File[] files = dir.listFiles();

for (int i = 0; i < files.length; i++) {

/* 递归 */

compress(files[i], out, basedir + dir.getName() + "/");

}

}

/** 压缩一个文件 */

private void compressFile(File file, ZipOutputStream out, String basedir) {

if (!file.exists()) {

return;

}

try {

BufferedInputStream bis = new BufferedInputStream(

new FileInputStream(file));

ZipEntry entry = new ZipEntry(basedir + file.getName());

out.putNextEntry(entry);

int count;

byte data[] = new byte[BUFFER];

while ((count = bis.read(data, 0, BUFFER)) != -1) {

out.write(data, 0, count);

}

bis.close();

} catch (Exception e) {

throw new RuntimeException(e);

}

}

}

3、可以用ant中的org.apache.tools.ant.taskdefs.Zip来实现,更加简单。

package net.szh.zip;

import java.io.File;

import org.apache.tools.ant.Project;

import org.apache.tools.ant.taskdefs.Zip;

import org.apache.tools.ant.types.FileSet;

public class ZipCompressorByAnt {

private File zipFile;

public ZipCompressorByAnt(String pathName) {

zipFile = new File(pathName);

}

public void compress(String srcPathName) {

File srcdir = new File(srcPathName);

if (!srcdir.exists())

throw new RuntimeException(srcPathName + "不存在!");

Project prj = new Project();

Zip zip = new Zip();

zip.setProject(prj);

zip.setDestFile(zipFile);

FileSet fileSet = new FileSet();

fileSet.setProject(prj);

fileSet.setDir(srcdir);

//fileSet.setIncludes("**/*.java"); 包括哪些文件或文件夹 eg:zip.setIncludes("*.java");

//fileSet.setExcludes(...); 排除哪些文件或文件夹

zip.addFileset(fileSet);

zip.execute();

}

}

测试一下

package net.szh.zip;

public class TestZip {

public static void main(String[] args) {

ZipCompressor zc = new ZipCompressor("E:\\szhzip.zip");

zc.compress("E:\\test");

ZipCompressorByAnt zca = new ZipCompressorByAnt("E:\\szhzipant.zip");

zca.compress("E:\\test");

}

}

本回答被提问者采纳

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

java文本压缩算法_java 什么算法压缩文件最小相关推荐

  1. java 生成zip如法打开_Java创建ZIP压缩文件的方法

    本文实例讲述了Java创建ZIP压缩文件的方法.分享给大家供大家参考.具体如下: 这里注意:建议使用org.apache.tools.zip.*包下相关类,否则可能会出现中文乱码问题. /** * 压 ...

  2. java 压缩加密_Java实现自动压缩文件并加密的方法示例

    本文实例讲述了Java实现自动压缩文件并加密的方法.分享给大家供大家参考,具体如下: 实现功能:自动压缩并加密 /** * * @Title: zipFilesAndEncrypt * @Descri ...

  3. java zip 创建目录_Java实现Zip压缩目录中的所有文件

    java中将一个文件夹下所有的文件压缩成一个文件,然import java.io.*; import java.util.zip.*; public class CompressD { // 缓冲 s ...

  4. java实现上传zip/rar压缩文件,自动解压

    在pom中添加解压jar依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&q ...

  5. Java ZipOutputStream 的使用,实现压缩文件

    Java 压缩文件主要通过 ZipOutputStream 实现,ZipOutputStream 有 5 个关键的方法: putNextEntry() 向压缩包中添加子文件,并设置文件路径和名称(压缩 ...

  6. Java调用系统解压_记一次Java利用cmd命令调用WinRAR压缩文件-压缩文件

    前言 最近在和一个档案管理系统对接,需要把我方系统文件压缩成zip格式,通过ftp的方式upload到指定的服务器上,考虑到Java的平台无关性,一开始便使用Java自带的类库java.util.zi ...

  7. c语言哈夫曼压缩文本,用哈夫曼压缩文件(C语言)

    用哈夫曼压缩文件(C语言) 用哈夫曼压缩文件(C语言) 2007-12-29 21:09:15| 分类: 编程 | 标签: |字号大中小 订阅 利用哈夫曼编码制作压缩软件,内容如下: #include ...

  8. java 重命名_Java如何重命名文件?

    在java编程中,如何重命名文件? 此示例演示如何使用File类的oldName.rename To(new_Name)方法重命名文件. package com.yiibai; import java ...

  9. java图片资源存放_Java编程中图片文件放哪

    举个例子:importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;/*按扭类*/classBombextendsJButton{publ ...

最新文章

  1. 一文读懂:GoogleNet的Inception从v1到v4的演变
  2. Powershell 如何批量获取文件大小的实现代码
  3. redhat 复制文件夹及子文件夹_python文件夹怎么操作呢??(建议详读)
  4. 怎么看待传菜机器人_太科幻了!这家顺德菜餐厅里全是机器人,炒菜送菜样样行...
  5. 关于权限五张表的独到见解
  6. express-partials与express4.x不兼容问题
  7. Python集合和函数
  8. .NET4.0 之 Dynamic VS Refle“.NET研究”ction 效率
  9. 超链接跳转到action使用哪个方法_管道疏通剂哪个牌子好 管道疏通机使用方法有哪些...
  10. MySQL学习笔记_6_SQL语言的设计与编写(下)
  11. 关于JSP(Java Server Pages)的内置对象有哪些?
  12. puppeteer 自动化测试 一
  13. java的知识点运用_javaAPI的相关知识点的运用!
  14. 菜鸟也要懂点设计模式|用Python设计一个请假模式
  15. C++ python 找标定圆点
  16. 通过云服务器实现淘宝京东抢拍器
  17. NTUSER.DAT
  18. delphi random_Delphi 7 中的随机函数
  19. 华硕win10键盘失灵_win10键盘失灵错乱的几种解决方法【图文】
  20. 打印机显示服务器脱机是什么原因,脱机使用打印机是什么意思?脱机打印机状态显示错误怎么办...

热门文章

  1. Java + Mysql + JDBC 图书馆 管理系统
  2. 计算机b类核心期刊有哪些,B类及以上期刊有哪些
  3. 95后沪漂女孩深陷“狠”且“卷”职场,向上思维,永不过时!
  4. Docker Registry部署镜像私有仓库及鉴权认证
  5. 第七天 01.ssh服务 使用堡塔以及xshell等连接linux
  6. 解决thinphp里返回json时斜杆和中文被转义问题
  7. libvpx将yuv转vp8/vp9(八)
  8. 作业周转时间以及平均等待时间
  9. Jmeter之参数化
  10. PointNet++理解(PointNet++实现第2步)