java tar.gz 压缩
时间: 2023-07-20 07:38:41 浏览: 143
要在 Java 中进行 tar.gz 压缩,可以使用 Java 中的 GZIPOutputStream 和 TarArchiveOutputStream 类。下面是一个简单的示例代码:
```java
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;
import org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream;
import java.io.*;
public class TarGzExample {
public static void main(String[] args) throws Exception {
// 源文件或目录
File source = new File("path/to/source");
// 目标文件
File target = new File("path/to/target.tar.gz");
// 创建 GzipCompressorOutputStream
FileOutputStream fos = new FileOutputStream(target);
GzipCompressorOutputStream gos = new GzipCompressorOutputStream(fos);
// 创建 TarArchiveOutputStream
TarArchiveOutputStream tos = new TarArchiveOutputStream(gos);
// 添加文件或目录
addFileToTarGz(tos, source, "");
// 关闭流
tos.close();
gos.close();
fos.close();
}
private static void addFileToTarGz(TarArchiveOutputStream tos, File file, String parent) throws Exception {
// 创建 TarArchiveEntry
TarArchiveEntry entry = new TarArchiveEntry(file, parent + file.getName());
// 如果是目录,递归添加子文件或子目录
if (file.isDirectory()) {
for (File child : file.listFiles()) {
addFileToTarGz(tos, child, entry.getName() + "/");
}
return;
}
// 添加 TarArchiveEntry
tos.putArchiveEntry(entry);
// 写入文件内容
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) {
tos.write(buffer, 0, len);
}
fis.close();
// 关闭 TarArchiveEntry
tos.closeArchiveEntry();
}
}
```
这里使用了第三方库 Apache Commons Compress 来简化操作,可以通过 Maven 导入:
```xml
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.20</version>
</dependency>
```