Java压缩文件

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 ll {

static final int BUFFER = 8192;

private File zipFile;

public ll(String pathName) {

zipFile = new File(pathName);

}

/**

* 压缩文件

* @param srcPathName

*/

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);

out.setEncoding("gbk");

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()) {

this.compressDirectory(file, out, basedir);

} else {

this.compressFile(file, out, basedir);

}

}

/** 压缩一个目录 */

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

if (!dir.exists())

return;

File[] files = dir.listFiles();

System.out.println(files.length+"--");

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);

}

}

private static  String getName(String filename){

if ((filename != null) && (filename.length() > 0)) {

int q=filename.lastIndexOf("\\");

System.out.println(q);

if(filename.contains(".")){

int dot = filename.lastIndexOf(‘.‘);

if ((dot > -1) && (dot < (filename.length() - 1))&&q>-1&&(q < (filename.length() - 1))) {

return filename.substring(q+1,dot);

}

}else{

if (q>-1&&(q < (filename.length() - 1))) {

return filename.substring(q + 1);

}

}

}

return filename;

}

public static void main(String[] args) {

File f1=new File("C:\\Users\\Administrator\\Desktop\\s\\测试");

File f2=new File("C:\\Users\\Administrator\\Desktop\\s" );

String fl1=f1.getPath();

String fl2=f2.getPath();

String name=getName(fl1);

ll zc = new ll(fl2+"\\"+name+".zip");

zc.compress(fl1);  //压缩一个文件夹

}

}

时间: 2024-11-03 21:00:06

Java压缩文件的相关文章

Java 压缩文件

package com; 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.ap

简单测试Demo:如何用Java压缩文件夹和文件

一.直接贴出测试代码 1 package com.jason.zip; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.OutputStream; 8 import java.util.ArrayList; 9 import java.util.List; 10 i

java压缩文件解压:调用WinRAR5命令强于自己写代码实现

最近,手上维护着一个几年前的系统,技术是用的JSP+Strust2,系统提供了rar和zip两种压缩格式的解压功能,后台是用java实现的 1.解压rar格式,采用的是java-unrar-0.3.jar 2.解压zip格式,采用的是commons-compress-1.4.1.jar 但最近根据用户反馈的问题,发现系统存在两个关于压缩文件解压的问题: 1.有些压缩文件解压之后出现中文乱码: 2.有些压缩文件根本不能解压 为了弥补上述两个问题,在之前代码的基础上打了一些补丁,来解决zip压缩包乱

Java 压缩文件夹工具类(包含解压)

依赖jar <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-compress</artifactId> <version>1.18</version> </dependency> CompressUtils.java package utils; import java.io.BufferedInputStream;

java压缩文件中文名乱码问题

import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; 改为 import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipOutputStream; ant包里提供ZipOutputStream类的setEncoding("gbk")方法. zos.setEncoding("gbk"); ant包下载(点击进

Java压缩文件以及解压文件

压缩流类: GZIPOutputStream和ZIpOutputStream可分别把数据压缩成GZip格式和Zip格式 GZIPInputStream和ZipInputStream可分别把压缩成GZIP格式或Zip的数据解压恢复原状 GZIP是多个文件压缩成一个文件,Zip是单个文件压缩: d多个文件依次压缩,out.putNextEntry是将文件的入口信息压缩到压缩文件中,getNextEntry判断是否有下一个文件 原文地址:https://www.cnblogs.com/mcmx/p/9

java压缩文件出现中文乱码问题

在项目中需要压缩文件下载,做完了发现有中文乱码问题,终于明白了. 引入ant.jar包 import org.apache.tools.zip.ZipEntry;   import org.apache.tools.zip.ZipOutputStream;

Java使用Zip压缩文件或整个目录

1.压缩文件或整个目录 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import java.util.zip.ZipEntry

Java学习笔记之I/O流(读取压缩文件以及压缩文件)

1.读取压缩文件:ZipInputStream 借助ZipFile类的getInputStream方法得到压缩文件的指定项的内容,然后传递给InputStreamReader类的构造方法,返回给BufferedReader类实例化,从而使得指定项的内容输出到内存中. 2.压缩文件:ZipOutputStream 2.1 注意,zipOut.putNextEntry(entry);// 此方法会清空zip文件原来存在的内容,然后写入文件,并将流定位到条目数据的开始处,直到关闭ZipOutputSt