在使用Java进行tar和gzip压缩时,如果最终结果不是一个.tar.gz
格式的文件,而是一个常规文件,可能是由于以下几个原因造成的:
下面是一个使用Java进行tar和gzip压缩的正确示例代码:
import java.io.*;
import org.apache.commons.compress.archivers.tar.*;
import org.apache.commons.compress.compressors.gzip.*;
public class TarGzipCompressor {
public static void main(String[] args) {
String sourceDir = "path/to/source/directory";
String outputFileName = "output.tar.gz";
try {
File source = new File(sourceDir);
FileOutputStream fos = new FileOutputStream(outputFileName);
BufferedOutputStream bos = new BufferedOutputStream(fos);
GzipCompressorOutputStream gzos = new GzipCompressorOutputStream(bos);
TarArchiveOutputStream tarOS = new TarArchiveOutputStream(gzos);
addFilesToTarGZ(source, "", tarOS);
tarOS.finish();
tarOS.close();
gzos.close();
bos.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void addFilesToTarGZ(File file, String parentPath, TarArchiveOutputStream tarOS) throws IOException {
String entryName = parentPath + file.getName();
TarArchiveEntry tarEntry = new TarArchiveEntry(file, entryName);
tarOS.putArchiveEntry(tarEntry);
if (file.isFile()) {
try (FileInputStream fis = new FileInputStream(file)) {
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) {
tarOS.write(buffer, 0, len);
}
}
tarOS.closeArchiveEntry();
} else if (file.isDirectory()) {
tarOS.closeArchiveEntry();
File[] children = file.listFiles();
if (children != null) {
for (File child : children) {
addFilesToTarGZ(child, entryName + "/", tarOS);
}
}
}
}
}
FileOutputStream
来写入最终的.tar.gz
文件。GzipCompressorOutputStream
将输出流包装成gzip压缩流。TarArchiveOutputStream
将gzip压缩流包装成tar归档流。通过上述方法和代码示例,你应该能够正确地生成.tar.gz
格式的文件。如果仍然遇到问题,请检查日志和异常信息,以便进一步诊断问题所在。
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云