gpt4 book ai didi

java - 如何使用 Apache Commons 解压缩 BZIP(不是 BZIP2)

转载 作者:行者123 更新时间:2023-12-02 01:28:48 25 4
gpt4 key购买 nike

我一直在致力于从不同类型的文件格式(例如“zip,tar,tbz,tgz”)解压缩的任务。我能够为除 tbz 之外的所有内容执行此操作,因为 apache common compress 库提供了 BZIP2 压缩器。但我需要解压旧的 BZIP 而不是 BZIP2。有什么方法可以用java实现吗?我已经添加了迄今为止使用下面的 apache commons 库提取不同 tar 文件存档的代码。

public List<ArchiveFile> processTarFiles(String compressedFilePath, String fileType) throws IOException {
List<ArchiveFile> extractedFileList = null;
TarArchiveInputStream is = null;
FileOutputStream fos = null;
BufferedOutputStream dest = null;
try {
if(fileType.equalsIgnoreCase("tar"))
{
is = new TarArchiveInputStream(new FileInputStream(new File(compressedFilePath)));
}
else if(fileType.equalsIgnoreCase("tbz")||fileType.equalsIgnoreCase("bz"))
{
is = new TarArchiveInputStream(new BZip2CompressorInputStream(new FileInputStream(new File(compressedFilePath))));
}
else if(fileType.equalsIgnoreCase("tgz")||fileType.equalsIgnoreCase("gz"))
{
is = new TarArchiveInputStream(new GzipCompressorInputStream(new FileInputStream(new File(compressedFilePath))));
}
TarArchiveEntry entry = is.getNextTarEntry();
extractedFileList = new ArrayList<>();
while (entry != null) {
// grab a zip file entry
String currentEntry = entry.getName();

if (!entry.isDirectory()) {
File destFile = new File(Constants.DEFAULT_ZIPOUTPUTPATH, currentEntry);
File destinationParent = destFile.getParentFile();
// create the parent directory structure if needed
destinationParent.mkdirs();
ArchiveFile archiveFile = new ArchiveFile();
int currentByte;
// establish buffer for writing file
byte data[] = new byte[(int) entry.getSize()];
// write the current file to disk
fos = new FileOutputStream(destFile);
dest = new BufferedOutputStream(fos, (int) entry.getSize());

// read and write until last byte is encountered
while ((currentByte = is.read(data, 0, (int) entry.getSize())) != -1) {
dest.write(data, 0, currentByte);
}
dest.flush();
dest.close();
archiveFile.setExtractedFilePath(destFile.getAbsolutePath());
archiveFile.setFormat(destFile.getName().split("\\.")[1]);
extractedFileList.add(archiveFile);
entry = is.getNextTarEntry();
} else {
new File(Constants.DEFAULT_ZIPOUTPUTPATH, currentEntry).mkdirs();
entry = is.getNextTarEntry();
}

}
} catch (IOException e) {
System.out.println(("ERROR: " + e.getMessage()));
} catch (Exception e) {
System.out.println(("ERROR: " + e.getMessage()));
} finally {
is.close();
dest.flush();
dest.close();
}

return extractedFileList;
}

最佳答案

最初的 Bzip 据说使用了专利算法,因此 Bzip2 使用非专利算法和技术诞生。

这可能就是它不再广泛使用并且开源库忽略它的原因。

显示了一些用于解压缩 Bzip 文件的 C 代码 here (gist.github.com mirror)。

您可能想用 Java 读取并重写它。

关于java - 如何使用 Apache Commons 解压缩 BZIP(不是 BZIP2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56440808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com