package app.rtc.utils;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
import org.apache.commons.compress.compressors.bzip2.BZip2CompressorOutputStream;
public class BZip2Utils {
public static final int BUFFER = 1024;
public static final CharSequence EXT = ".bz2";
/**
* 数据压缩
*
* @param data
* @return
* @throws Exception
*/
public static byte[] compress(byte[] data) throws Exception {
ByteArrayInputStream bais = new ByteArrayInputStream(data);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// 压缩
compress(bais, baos);
byte[] output = baos.toByteArray();
baos.flush();
baos.close();
bais.close();
return output;
}
/**
* 文件压缩
*
* @param file
* @throws Exception
*/
public static void compress(File file) throws Exception {
compress(file, true);
}
/**
* 文件压缩
*
* @param file
* @param delete
* 是否删除原始文件
* @throws Exception
*/
public static void compress(File file, boolean delete) throws Exception {
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(file.getPath() + EXT);
compress(fis, fos);
fis.close();
fos.flush();
fos.close();
if (delete) {
file.delete();
}
}
/**
* 数据压缩
*
* @param is
* @param os
* @throws Exception
*/
public static void compress(InputStream is, OutputStream os)
throws Exception {
BZip2CompressorOutputStream gos = new BZip2CompressorOutputStream(os);
int count;
byte data[] = new byte[BUFFER];
while ((count = is.read(data, 0, BUFFER)) != -1) {
gos.write(data, 0, count);
}
gos.finish();
gos.flush();
gos.close();
}
/**
* 文件压缩
*
* @param path
* @throws Exception
*/
public static void compress(String path) throws Exception {
compress(path, true);
}
/**
* 文件压缩
*
* @param path
* @param delete
* 是否删除原始文件
* @throws Exception
*/
public static void compress(String path, boolean delete) throws Exception {
File file = new File(path);
compress(file, delete);
}
/**
* 数据解压缩
*
* @param data
* @return
* @throws Exception
*/
public static byte[] decompress(byte[] data) throws Exception {
ByteArrayInputStream bais = new ByteArrayInputStream(data);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// 解压缩
decompress(bais, baos);
data = baos.toByteArray();
baos.flush();
baos.close();
bais.close();
return data;
}
/**
* 文件解压缩
*
* @param file
* @throws Exception
*/
public static void decompress(File file) throws Exception {
decompress(file, true);
}
/**
* 文件解压缩
*
* @param file
* @param delete
* 是否删除原始文件
* @throws Exception
*/
public static void decompress(File file, boolean delete) throws Exception {
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(file.getPath().replace(EXT,
""));
decompress(fis, fos);
fis.close();
fos.flush();
fos.close();
if (delete) {
file.delete();
}
}
/**
* 数据解压缩
*
* @param is
* @param os
* @throws Exception
*/
public static void decompress(InputStream is, OutputStream os)
throws Exception {
BZip2CompressorInputStream gis = new BZip2CompressorInputStream(is);
int count;
byte data[] = new byte[BUFFER];
while ((count = gis.read(data, 0, BUFFER)) != -1) {
os.write(data, 0, count);
}
gis.close();
}
/**
* 文件解压缩
*
* @param path
* @throws Exception
*/
public static void decompress(String path) throws Exception {
decompress(path, true);
}
/**
* 文件解压缩
*
* @param path
* @param delete
* 是否删除原始文件
* @throws Exception
*/
public static void decompress(String path, boolean delete) throws Exception {
File file = new File(path);
decompress(file, delete);
}
public static void main(String[] args) {
try {
BZip2Utils.compress(new File("D:/CHKRPT/report_result/20120923/60/0013100152373/IM-DQ0001-0013100152373.xls"), false);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
分享到:
相关推荐
开发者可以使用它来实时解压缩从文件或网络读取的数据流。 2. `BZip2CompressorOutputStream`: 它实现了输出流接口,允许开发者将数据写入并压缩为BZIP2格式。这对于保存空间或在网络上传输大量数据非常有用。 3. ...
解压缩文件同样使用`java.util.zip`包,可以创建一个类来读取并解压ZIP文件: ```java import java.io.*; import java.util.zip.*; public class UnzipExample { public static void main(String[] args) throws ...
3. **解压缩文件** 解压ZIP文件则需要一个`ZipInputStream`实例,它包装在一个`FileInputStream`中,指向ZIP文件。通过调用`getNextEntry`方法,你可以逐个访问ZIP文件中的每个条目,然后创建相应的文件或目录,将...
可能的方法有`compressFileToBZip2()`用于将普通文件压缩为bzip2格式,以及`decompressBZip2ToFile()`用于将bzip2文件解压缩回原始格式。 - `BZip2UtilsTest.java`: 这个文件是测试`BZip2Utils.java`中方法的单元...
- 解压缩文件:创建`ZipInputStream`,遍历每一个`ZipEntry`,并将其解压缩到指定的目录。 6. **源代码分析**:提供的源代码将展示如何利用Java的压缩库进行实际操作,包括文件选择、流的创建与关闭、异常处理等,...
Java文件的压缩与解压缩是Java编程中一个实用且常见的技术,主要涉及到Java的I/O流和第三方库如Apache Commons Compress、Java内置的java.util.zip包等。本实践项目结合了源代码和相关论文,提供了深入理解这一主题...
- **错误处理和验证**:工具类应该包含了错误处理机制,如处理文件不存在、权限不足或压缩文件损坏等情况。同时,解压缩后,可能会通过比较原始文件和解压缩后的文件哈希值来验证数据一致性。 - **API设计**:为了...
### JAVA源码JAVA文件压缩与解压缩实践(源代码+论文) #### 文件压缩与解压缩在JAVA中的应用 文件压缩技术在计算机科学中扮演着重要的角色,它不仅可以节省存储空间,还能提高数据传输效率。在Java语言环境中实现...
在Java项目中,你可以通过编写XML格式的构建脚本(build.xml)来调用Ant任务,其中包括`unzip`任务,可以方便地解压缩文件。例如: ```xml ``` 5. **第三方库如Apache Commons Compress**: 虽然Java的标准库...
在Java编程语言中,文件的压缩与解压缩是常见的操作,尤其在数据传输、存储优化以及备份场景下显得尤为重要。本实践源代码提供了一个全面的示例,帮助开发者理解和掌握如何在Java环境中处理这一任务。这里我们将深入...
- **解压缩文件**:使用`ZipInputStream`,调用`getNextEntry`获取ZIP中的下一个条目,然后读取数据并写入目标文件。 5. **递归压缩和解压缩目录** 在实践中,可能需要压缩整个目录及其所有子目录。这需要递归...
解压缩文件的步骤类似,但使用`ZipInputStream`: 1. 创建`ZipInputStream`对象,指定输入流(如文件输入流)。 2. 使用`getNextEntry`方法获取ZIP文件中的下一个条目。 3. 对每个条目,创建一个`FileOutputStream`...
Java解压缩技术是Java开发中常见的一种操作,主要用于处理ZIP、GZ、TAR等格式的压缩文件。在本文中,我们将深入探讨Java如何进行文件的解压缩,并提供相关的代码示例。 首先,Java标准库提供了`java.util.zip`包,...
标题提到的"用java解压*.zip*.rar*.gz*.bz*.bz2等压缩文件含jar"涉及到Java对多种压缩格式的支持,包括ZIP、RAR、GZ、BZ和BZ2。这些文件格式在软件开发、数据传输和存储中广泛使用。下面我们将详细讨论如何使用Java...
2. **ZipOutputStream**:这个类是用于创建ZIP格式的压缩文件。你可以通过它将文件或数据流写入到ZIP文件中。首先,你需要创建一个`FileOutputStream`指向目标ZIP文件,然后用`ZipOutputStream`包装这个输出流。接着...
本主题聚焦于“7z解压缩java代码+工具”,它涉及到使用Java编程语言实现对7z、tar、gz等压缩格式的支持。下面我们将深入探讨相关知识点。 首先,7z是一种高效的压缩格式,由7-Zip软件创建,它提供了比常见的ZIP或...
库中的主要类和接口包括 `ArchiveInputStream` 和 `ArchiveOutputStream`,它们分别用于读取和写入压缩文件,以及 `CompressorInputStream` 和 `CompressorOutputStream` 用于处理一般压缩流。 在源码中,我们可以...
Java文件压缩与解压缩是Java开发中常见的操作,特别是在数据传输、存储优化或者备份场景下。本实践项目涉及到了Java的I/O流处理、ZIP和GZIPOutputStream及InflaterInputStream等核心API,旨在帮助开发者理解如何在...