tar gz java引言
在Java开发中,为了传输、存储或发布,我们经常需要将多个文件或文件夹打包成一个文件。tar.gz格式是一种常见的文件压缩格式,可以将多个文件或文件夹压缩成一个.tar.Gz是后缀的压缩包。本文将介绍如何使用Java代码压缩和解压文件,并提供相应的代码示例。
压缩文件为了压缩文件或文件夹,我们首先需要使用Java压缩库来创建一个文件或文件夹。.tar.GZ文件,并在压缩包中添加需要压缩的文件或文件夹。以下是一个示例代码:
import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.zip.GZIPOutputStream;import org.apache.commons.compress.archivers.tar.TarArchiveEntry;import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;public class CompressExample { public static void main(String[] args) throws IOException { String sourcePath = "/path/to/source/folder"; String targetPath = "/path/to/target.tar.gz"; File targetFile = new File(targetPath); FileOutputStream fileOutputStream = new FileOutputStream(targetFile); GZIPOutputStream gzipOutputStream = new GZIPOutputStream(fileOutputStream); TarArchiveOutputStream tarOutputStream = new TarArchiveOutputStream(gzipOutputStream); File sourceFolder = new File(sourcePath); addFilesToTar(sourceFolder, "", tarOutputStream); tarOutputStream.finish(); tarOutputStream.close(); System.out.println("Compression completed successfully."); } private static void addFilesToTar(File file, String parent, TarArchiveOutputStream tarOutputStream) throws IOException { String entryName = parent + file.getName(); TarArchiveEntry tarEntry = new TarArchiveEntry(file, entryName); tarOutputStream.putArchiveEntry(tarEntry); if (file.isFile()) { FileInputStream fileInputStream = new FileInputStream(file); byte[] buffer = new byte[1024]; int length; while ((length = fileInputStream.read(buffer)) != -1) { tarOutputStream.write(buffer, 0, length); } fileInputStream.close(); } else if (file.isDirectory()) { File[] files = file.listFiles(); if (files != null) { for (File childFile : files) { addFilesToTar(childFile, entryName + "/", tarOutputStream); } } } tarOutputStream.closeArchiveEntry(); }}
通过上述代码GZIPOutputStream
和TarArchiveOutputStream
类来实现文件的压缩操作。首先,我们创建了一个.tar.并使用gz文件FileOutputStream
和GZIPOutputStream
连接文件。然后,我们创建了一个TarArchiveOutputStream
对象,使用addFilesToTar
该方法将需要压缩的文件或文件夹添加到压缩包中。最后,我们完成压缩并关闭相关流量。
解压缩一个.tar.gz文件,我们首先需要使用Java的解压类库来读取和解压压缩包中的文件。以下是一个示例代码:
import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.zip.GZIPInputStream;import org.apache.commons.compress.archivers.tar.TarArchiveEntry;import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;public class DecompressExample { public static void main(String[] args) throws IOException { String sourcePath = "/path/to/source.tar.gz"; String targetPath = "/path/to/target/folder"; File sourceFile = new File(sourcePath); FileInputStream fileInputStream = new FileInputStream(sourceFile); GZIPInputStream gzipInputStream = new GZIPInputStream(fileInputStream); TarArchiveInputStream tarInputStream = new TarArchiveInputStream(gzipInputStream); File targetFolder = new File(targetPath); extractFilesFromTar(tarInputStream, targetFolder); tarInputStream.close(); System.out.println("Decompression completed successfully."); } private static void extractFilesFromTar(TarArchiveInputStream tarInputStream, File targetFolder) throws IOException { TarArchiveEntry tarEntry; while ((tarEntry = tarInputStream.getNextTarEntry()) != null) { File outputFile = new File(targetFolder, tarEntry.getName()); if (tarEntry.isDirectory()) { outputFile.mkdirs(); } else { outputFile.getParentFile().mkdirs(); FileOutputStream fileOutputStream = new FileOutputStream(outputFile); byte[] buffer = new byte[1024]; int length; while ((length = tarInputStream.read(buffer)) != -1) { fileOutputStream.write(buffer, 0, length);
