CompressUtil.createExtractor支持tgz自动识别

This commit is contained in:
Looly
2024-07-31 00:36:07 +08:00
parent 72ac17e41e
commit 967f3d2ca0

View File

@@ -12,6 +12,12 @@
package org.dromara.hutool.extra.compress; package org.dromara.hutool.extra.compress;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import org.apache.commons.compress.archivers.StreamingNotSupportedException;
import org.apache.commons.compress.compressors.CompressorException;
import org.apache.commons.compress.compressors.CompressorInputStream;
import org.apache.commons.compress.compressors.CompressorOutputStream;
import org.apache.commons.compress.compressors.CompressorStreamFactory;
import org.dromara.hutool.core.io.IoUtil; import org.dromara.hutool.core.io.IoUtil;
import org.dromara.hutool.core.text.StrUtil; import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.extra.compress.archiver.Archiver; import org.dromara.hutool.extra.compress.archiver.Archiver;
@@ -20,12 +26,6 @@ import org.dromara.hutool.extra.compress.archiver.StreamArchiver;
import org.dromara.hutool.extra.compress.extractor.Extractor; import org.dromara.hutool.extra.compress.extractor.Extractor;
import org.dromara.hutool.extra.compress.extractor.SevenZExtractor; import org.dromara.hutool.extra.compress.extractor.SevenZExtractor;
import org.dromara.hutool.extra.compress.extractor.StreamExtractor; import org.dromara.hutool.extra.compress.extractor.StreamExtractor;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import org.apache.commons.compress.archivers.StreamingNotSupportedException;
import org.apache.commons.compress.compressors.CompressorException;
import org.apache.commons.compress.compressors.CompressorInputStream;
import org.apache.commons.compress.compressors.CompressorOutputStream;
import org.apache.commons.compress.compressors.CompressorStreamFactory;
import java.io.File; import java.io.File;
import java.io.InputStream; import java.io.InputStream;
@@ -178,16 +178,20 @@ public class CompressUtil {
* @param file 归档文件 * @param file 归档文件
* @return {@link Extractor} * @return {@link Extractor}
*/ */
public static Extractor createExtractor(final Charset charset, final String archiverName, final File file) { public static Extractor createExtractor(final Charset charset, String archiverName, final File file) {
if (ArchiveStreamFactory.SEVEN_Z.equalsIgnoreCase(archiverName)) { if (ArchiveStreamFactory.SEVEN_Z.equalsIgnoreCase(archiverName)) {
return new SevenZExtractor(file); return new SevenZExtractor(file);
} }
try {
if (StrUtil.isBlank(archiverName) && file.getName().toLowerCase().endsWith(".tgz")) { if(StrUtil.isBlank(archiverName)){
final String name = file.getName().toLowerCase();
if(name.endsWith(".tgz")){
archiverName = "tgz"; archiverName = "tgz";
} else if (StrUtil.isBlank(archiverName) && file.getName().toLowerCase().endsWith(".tar.gz")) { } else if(name.endsWith(".tar.gz")){
archiverName = "tar.gz"; archiverName = "tar.gz";
} }
}
try {
return new StreamExtractor(charset, archiverName, file); return new StreamExtractor(charset, archiverName, file);
} catch (final CompressException e) { } catch (final CompressException e) {
final Throwable cause = e.getCause(); final Throwable cause = e.getCause();