package jp.biziq.sxf.zip;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import org.apache.commons.codec.binary.Base64;
public class ZipCompress {
public static void main(String[] args) {
// File file = new File("d:\\search_user_max_create_zip.xml");
// File file = new File("d:\\abc\\search_user_max.xml");
File file = new File("d:\\abc\\offer_max.xml");
try {
FileReader fr = new FileReader(file);
BufferedReader bfr = new BufferedReader(fr);
StringBuffer sb = new StringBuffer("");
String str = null;
while((str = bfr.readLine()) != null) {
sb.append(str);
sb.append("\r\n");
}
bfr.close();
fr.close();
// System.out.println(sb.toString());
long startTime = System.currentTimeMillis();
String result = ZipCompress.compress(sb.toString());
System.out.println("压缩耗时:" + (System.currentTimeMillis() - startTime) + "ms");
startTime = System.currentTimeMillis();
String deCompress = ZipCompress.decompress(result);
System.out.println("解压缩耗时:" + (System.currentTimeMillis() - startTime) + "ms");
// OutputStream os = new FileOutputStream("d:\\compress_users_string.xml");
// os.write(result.getBytes(), 0, result.getBytes().length);
// System.out.println(deCompress);
FileWriter fw = new FileWriter("d:\\compress_users_string_fw.xml");
fw.write(result);
// os.close();
fw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
/*String str = "奥术法术的方式地方史蒂夫23423sss222xxx || 奥术法术的方式地方史蒂夫23423sss222xxx";
String compress = ZipCompress.compress(str);
System.out.println(compress);
System.out.println(ZipCompress.decompress(compress));*/
/*String str1 = "是的防守打法xxxs234234";
String str2 = "test蛤蟆??";
byte[] compress1 = ZipCompress.compress(str1);
byte[] compress2 = ZipCompress.compress(str2);
// for(byte b : compress1) {
// System.out.print((char)b);
// }
// System.out.println();
// for(byte b : compress2) {
// System.out.print((char)b);
// }
System.out.println("compress1: " + compress1);
System.out.println("解压compress1:" + ZipCompress.decompress(compress1));
System.out.println("解压compress2:" + ZipCompress.decompress(compress2));
byte[] sum = new byte[compress1.length + compress2.length];
System.arraycopy(compress1, 0, sum, 0, compress1.length);
System.arraycopy(compress2, 0, sum, compress1.length, compress2.length);
for(byte b : sum) {
System.out.print((char)b);
}
System.out.println();
System.out.println("解压:" + ZipCompress.decompress(sum));*/
/*File file = new File("d:\\search_user_max_create_zip.xml");
try {
FileReader fr = new FileReader(file);
BufferedReader bfr = new BufferedReader(fr);
StringBuffer sb = new StringBuffer("");
String str = null;
while((str = bfr.readLine()) != null) {
sb.append(str);
sb.append("\r\n");
}
bfr.close();
fr.close();
// System.out.println(sb.toString());
long startTime = System.currentTimeMillis();
byte[] result = ZipCompress.compress(sb.toString());
System.out.println("压缩耗时:" + (System.currentTimeMillis() - startTime) + "ms");
startTime = System.currentTimeMillis();
ZipCompress.decompress(result);
System.out.println("解压缩耗时:" + (System.currentTimeMillis() - startTime) + "ms");
OutputStream os = new FileOutputStream("d:\\compress_users.xml");
os.write(result, 0, result.length);
os.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}*/
}
/**
* 压缩字符串为 byte[]
* 储存可以使用new sun.misc.BASE64Encoder().encodeBuffer(byte[] b)方法
* 保存为字符串
*
* @param str 压缩前的文本
* @return
*/
public static final String compress(String str) {
if(str == null) {
return null;
}
byte[] compressed;
ByteArrayOutputStream out = null;
ZipOutputStream zout = null;
try {
out = new ByteArrayOutputStream();
zout = new ZipOutputStream(out);
zout.putNextEntry(new ZipEntry("0"));
zout.write(str.getBytes());
zout.closeEntry();
compressed = out.toByteArray();
} catch(IOException e) {
e.printStackTrace();
compressed = null;
} finally {
if(zout != null) {
try{zout.close();} catch(IOException e){}
}
if(out != null) {
try{out.close();} catch(IOException e){}
}
}
if(compressed != null) {
return Base64.encodeBase64String(compressed);
}
return null;
}
/**
* 将压缩后的 byte[] 数据解压缩
*
* @param compressed 压缩后的 byte[] 数据
* @return 解压后的字符串
*/
public static final String decompress(String str) {
byte[] compressed = Base64.decodeBase64(str);
if(compressed == null) {
return null;
}
ByteArrayOutputStream out = null;
ByteArrayInputStream in = null;
ZipInputStream zin = null;
String decompressed;
try {
out = new ByteArrayOutputStream();
in = new ByteArrayInputStream(compressed);
zin = new ZipInputStream(in);
ZipEntry entry = zin.getNextEntry();
byte[] buffer = new byte[1024];
int offset = -1;
while((offset = zin.read(buffer)) != -1) {
out.write(buffer, 0, offset);
}
decompressed = out.toString();
} catch (IOException e) {
e.printStackTrace();
decompressed = null;
} finally {
if(zin != null) {
try {zin.close();} catch(IOException e) {}
}
if(in != null) {
try {in.close();} catch(IOException e) {}
}
if(out != null) {
try {out.close();} catch(IOException e) {}
}
}
return decompressed;
}
}
分享到:
相关推荐
在Java编程环境中,解压ZIP压缩文件是一项常见的任务,它涉及到文件I/O操作以及对ZIP文件格式的理解。本文将深入探讨如何使用Java实现这一功能,同时也会提及`UnZip.java`和`UnZip2.java`这两个文件可能包含的实现...
本文将深入探讨如何使用Java来处理ZIP文件,特别是针对标题所提及的“java 中 zip压缩文件解压工具类”。我们将讨论核心的Java API,如`java.util.zip`包中的类,并通过一个名为`CompressFileUtils`的工具类来展示...
本文将深入探讨如何使用Java实现ZIP和RAR类型的压缩与解压操作,以及相关知识点。 首先,我们来看ZIP文件格式。ZIP是一种广泛使用的文件压缩格式,其在Java中的处理主要通过`java.util.zip`包。这个包提供了多个类...
根据给定的文件信息,我们可以深入探讨Java中文件的压缩与解压缩技术,特别是使用GZIP格式进行操作的实现方式。下面将详细解释文件压缩与解压缩的基本原理、使用场景以及具体的Java代码实现。 ### Java文件压缩:...
在Java编程环境中,处理文件的压缩与解压是常见的任务,尤其在数据传输或存储时。本篇文章将详细探讨如何使用Java内置的IO流来实现文件夹的zip压缩以及zip压缩包的解压,无需依赖其他的第三方库如Apache Commons IO...
网上很多描述java解压中文乱码的问题,很多描述不全.由于工作需要整理出一个完整版.简单实用.下载后请从ZipUtil.java的main方法开始,一目了然. public static void main(String args[]) { new ZipUtil().unZip("E:\\...
在Java编程环境中,处理文件压缩和解压任务是常见的需求,尤其在数据传输或存储时。ZIP文件格式因其广泛支持和高效性而被广泛应用。本文将深入探讨如何使用Java实现ZIP文件的压缩与解压,重点讲解核心API,如`java....
在Java编程中,处理压缩文件,如ZIP格式的文件,是一项常见的任务。本文将深入探讨如何使用Java来获取ZIP文件的名称以及如何高效地解压缩这些文件,特别是通过多线程来提高性能。 首先,我们需要引入Java的内置库`...
在Java编程环境中,处理RAR文件的压缩和解压是一项常见的任务。RAR是一种高效的文件压缩格式,通常用于存储和传输大量数据。本篇文章将详细介绍如何使用Java来实现RAR文件的压缩和解压操作。 首先,Java标准库并...
在Java编程环境中,解压不同类型的压缩文件,如RAR5、Zip和7z,是一项常见的任务。为了实现这一功能,我们需要使用特定的库,因为Java标准库并不直接支持RAR5和7z格式。这里我们将详细探讨如何使用Java来处理这些...
### 实现Java文件压缩与解压 #### 一、引言 在计算机科学领域,文件压缩与解压是一项非常实用的技术。它不仅能够减少文件占用的空间,提高存储效率,还能加速文件在网络中的传输速度。Java作为一种广泛使用的编程...
在给定的项目中,"JAVA 压缩解压AES"涉及到了Java的文件压缩和解压缩技术,以及AES加密解密的实现。通过`java.util.zip`库或Apache Commons Compress库可以实现文件夹的压缩和解压缩,而AES加密则可以通过Java ...
在Java编程语言中,GZIP是一种常用的文件压缩格式,它基于DEFLATE算法,可以用于压缩和解压缩数据。在本文中,我们将深入探讨如何使用Java实现GZIP压缩和解压缩文件的源码。 首先,我们需要引入Java的`java.util....
### Java算法:实现压缩及解压缩 #### 一、压缩功能实现 在Java中实现文件压缩功能主要依赖于`java.util.zip`包中的类。以下是对压缩代码的详细解析: ##### 1. 导入所需类库 ```java import java.io....
在Java程序中,你需要编写两个主要类:一个用于压缩,另一个用于解压。这两个类都需要维护字典状态,并按照上述步骤进行操作。同时,为了便于使用,可以设计一个主类来接收用户输入,调用压缩和解压类,并输出结果。...
这篇博客“java ftp上传 下载 文件压缩解压”很可能是关于如何使用Java实现FTP文件上传、下载以及文件的压缩与解压功能。下面我们将深入探讨这些知识点。 首先,FTP上传和下载是Java中常见的任务,通常通过`java...
Java中的压缩和解压操作是常见的文件处理任务,Zip4j是一个非常实用的Java库,专为处理ZIP文件而设计。这个库提供了丰富的API,使得开发者可以方便地创建、读取、更新和解压ZIP文件。这篇博客文章“Java压缩解压ZIP...
### JAVA解压和压缩详解 #### 一、概述 在软件开发过程中,文件的压缩与解压是一项常用的功能。尤其在处理大量数据时,通过压缩技术可以有效减少存储空间的需求及传输时间。Java作为一种广泛使用的编程语言,提供...
### Java中压缩与解压——中文文件名乱码解决办法 #### 一、问题背景及原理分析 在Java中处理文件的压缩与解压时,经常会遇到中文文件名出现乱码的问题。这个问题主要源于Java中默认使用的编码方式与实际文件名...
在实际项目中,我们可能会遇到各种复杂情况,例如密码保护的压缩文件、自解压文件等,这些都需要根据具体需求进行处理。同时,解压缩过程中的错误处理和资源管理也非常重要,避免因文件不存在、权限问题等引发的异常...