java 压缩pdf_java实现文件的压缩和解压

秦信瑞
2023-12-01

代码压缩实现

package com.hjh.demo.zip;

import java.io.BufferedInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.zip.CRC32;

import java.util.zip.CheckedOutputStream;

//使用org.apache.tools.zip这个就不会中文乱码 来自于ant.jar

import org.apache.tools.zip.ZipEntry;

import org.apache.tools.zip.ZipOutputStream;

//使用java.util.zip原生ZipOutputStream与ZipEntry会中文乱码

//import java.util.zip.ZipOutputStream;

//import java.util.zip.ZipEntry;

public class TestZip

{

static String filePath = "F:/test/json.txt";//需要压缩的文件夹完整路径

static String fileName = "zip";//需要压缩的文件夹名

static String outPath = "F:/test/zip/Test.zip";//压缩完成后保存为Test.zip文件,名字随意

public static void main(String args[]) throws Exception

{

OutputStream is = new FileOutputStream(outPath);//创建Test.zip文件

CheckedOutputStream cos = new CheckedOutputStream(is, new CRC32());//检查输出流,采用CRC32算法,保证文件的一致性

ZipOutputStream zos = new ZipOutputStream(cos);//创建zip文件的输出流

zos.setEncoding("GBK");//设置编码,防止中文乱码

File file = new File(filePath);//需要压缩的文件或文件夹对象

// ZipFile(zos,file);//压缩文件的具体实现函数

zipFileContent(zos,file);

zos.close();

cos.close();

is.close();

System.out.println("压缩完成");

}

public static void zipFileContent(ZipOutputStream zos,File file) throws Exception

{

if(file.isDirectory())

{

for(File f : file.listFiles())

{

zipFileContent(zos, f);

}

}

else

{

//用字节方式读取源文件

InputStream is = new FileInputStream(file.getPath());

//创建一个缓存区

BufferedInputStream bis = new BufferedInputStream(is);

//字节数组,每次读取1024个字节

byte [] b = new byte[1024];

zos.putNextEntry(new ZipEntry(file.getName()));

//循环读取,边读边写

while(bis.read(b) != -1)

{

zos.write(b);//写入压缩文件

}

//关闭流

bis.close();

is.close();

}

}

//递归,获取需要压缩的文件夹下面的所有子文件,然后创建对应目录与文件,对文件进行压缩

public static void ZipFile(ZipOutputStream zos,File file) throws Exception

{

if(file.isDirectory())

{

//创建压缩文件的目录结构

zos.putNextEntry(new ZipEntry(file.getPath().substring(file.getPath().indexOf(fileName))+File.separator));

for(File f : file.listFiles())

{

ZipFile(zos,f);

}

}

else

{

//打印输出正在压缩的文件

System.out.println("正在压缩文件:"+file.getName());

//创建压缩文件

zos.putNextEntry(new ZipEntry(file.getPath().substring(file.getPath().indexOf(fileName))));

//用字节方式读取源文件

InputStream is = new FileInputStream(file.getPath());

//创建一个缓存区

BufferedInputStream bis = new BufferedInputStream(is);

//字节数组,每次读取1024个字节

byte [] b = new byte[1024];

//循环读取,边读边写

while(bis.read(b)!=-1)

{

zos.write(b);//写入压缩文件

}

//关闭流

bis.close();

is.close();

}

}

}

代码解压实现

package com.hjh.demo.zip;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.Enumeration;

import java.util.zip.CRC32;

import java.util.zip.CheckedInputStream;

//使用org.apache.tools.zip这个就不会中文乱码 来自于ant.jar

import org.apache.tools.zip.ZipEntry;

import org.apache.tools.zip.ZipFile;

//使用java.util.zip原生ZipOutputStream与ZipEntry会中文乱码

//import java.util.zip.ZipEntry;

//import java.util.zip.ZipFile;

public class TestUnzip

{

static String zipPath = "F:/test/zip/Test.zip";//需要解压的压缩文件

static String outPath = "F:/test/zip/unzip/";//解压完成后保存路径,记得"\\"结尾哈

public static void main(String args[]) throws Exception

{

ZipFile zipFile = new ZipFile(zipPath,"GBK");//压缩文件的实列,并设置编码

//获取压缩文中的所以项

for(Enumeration enumeration = zipFile.getEntries();enumeration.hasMoreElements();)

{

ZipEntry zipEntry = enumeration.nextElement();//获取元素

System.out.println("解压到的条目 : " + zipEntry.getName());

//排除空文件夹

if(!zipEntry.getName().endsWith(File.separator))

{

// System.out.println("正在解压文件:"+zipEntry.getName());//打印输出信息

OutputStream os = new FileOutputStream(outPath+zipEntry.getName());//创建解压后的文件

BufferedOutputStream bos = new BufferedOutputStream(os);//带缓的写出流

InputStream is = zipFile.getInputStream(zipEntry);//读取元素

BufferedInputStream bis = new BufferedInputStream(is);//读取流的缓存流

CheckedInputStream cos = new CheckedInputStream(bis, new CRC32());//检查读取流,采用CRC32算法,保证文件的一致性

byte [] b = new byte[1024];//字节数组,每次读取1024个字节

//循环读取压缩文件的值

while(cos.read(b)!=-1)

{

bos.write(b);//写入到新文件

}

cos.close();

bis.close();

is.close();

bos.close();

os.close();

}

else

{

//如果为空文件夹,则创建该文件夹

new File(outPath+zipEntry.getName()).mkdirs();

}

}

System.out.println("解压完成");

zipFile.close();

}

}

 类似资料: