Java的tar压缩多级文件夹,java批量解压文件夹下的所有压缩文件(.rar、.zip、.gz、.tar.gz)...

这是一个Java工具类,用于批量解压文件夹下的.zip、.rar、.gz和.tar.gz压缩文件。类中包含了针对每种压缩格式的解压方法,并提供了创建输出目录的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// java批量解压文件夹下的所有压缩文件(.rar、.zip、.gz、.tar.gz)

新建工具类:

package com.mobile.utils;

import com.github.junrar.Archive;

import com.github.junrar.rarfile.FileHeader;

import org.apache.tools.tar.TarEntry;

import org.apache.tools.tar.TarInputStream;

import java.io.*;

import java.nio.charset.Charset;

import java.util.Enumeration;

import java.util.zip.GZIPInputStream;

import java.util.zip.ZipEntry;

import java.util.zip.ZipFile;

/**

* @Description: UnzipUtil 工具类

* @Param:

* @return:

* @Author: mufeng

* @Date: 2018/8/20

*/

public class UnzipUtil {

//解压.zip文件

public static void unZip(String sourceFile, String outputDir) throws IOException {

ZipFile zipFile = null;

File file = new File(sourceFile);

try {

Charset CP866 = Charset.forName("CP866"); //specifying alternative (non UTF-8) charset

zipFile = new ZipFile(file, CP866);

createDirectory(outputDir,null);//创建输出目录

Enumeration> enums = zipFile.entries();

while(enums.hasMoreElements()){

ZipEntry entry = (ZipEntry) enums.nextElement();

System.out.println("解压." + entry.getName());

if(entry.isDirectory()){//是目录

createDirectory(outputDir,entry.getName());//创建空目录

}else{//是文件

File tmpFile = new File(outputDir + "/" + entry.getName());

createDirectory(tmpFile.getParent() + "/",null);//创建输出目录

InputStream in = null;

OutputStream out = null;

try{

in = zipFile.getInputStream(entry);;

out = new FileOutputStream(tmpFile);

int length = 0;

byte[] b = new byte[2048];

while((length = in.read(b)) != -1){

out.write(b, 0, length);

}

}catch(IOException ex){

throw ex;

}finally{

if(in!=null)

in.close();

if(out!=null)

out.close();

}

}

}

} catch (IOException e) {

throw new IOException("解压缩文件出现异常",e);

} finally{

try{

if(zipFile != null){

zipFile.close();

}

}catch(IOException ex){

throw new IOException("关闭zipFile出现异常",ex);

}

}

}

/**

* 构建目录

* @param outputDir

* @param subDir

*/

public static void createDirectory(String outp

<think>我们正在解决用户遇到的错误:`tar: Error opening archive: Unrecognized archive format` 根据引用[2]中提到的解决方案,该错误通常表示tar无法识别归档文件的格式。可能的原因包括: 1. 文件已损坏 2. 文件不是有效的tar.gz格式(可能是其他压缩格式) 3. 下载不完整 根据引用[1]中用户遇到的问题,他们在安装graphviz时遇到类似错误,最终通过单独安装依赖解决。但当前用户的问题似乎是直接解压一个tar.gz文件时出现格式无法识别。 因此,我们的解决步骤应该是: 1. 验证文件完整性:检查文件大小是否与预期一致,或者重新下载文件。 2. 使用`file`命令检查文件类型,确认是否为gzip压缩tar文件。 3. 尝试使用其他工具解压,例如`gunzip`解压后再用`tar`解包。 具体步骤: 步骤1:检查文件类型 在终端运行: ```bash file 文件名.tar.gz ``` 预期输出应包含“gzip compressed data”字样。如果不是,则说明文件可能不是gzip格式。 步骤2:检查文件完整性(通过MD5或SHA256校验,如果有原始校验值的话) 如果没有校验值,可以尝试重新下载。 步骤3:尝试分步解压 如果文件类型正确,但tar仍然无法解压,可以尝试: ```bash gunzip 文件名.tar.gz ``` 然后解压生成的tar文件: ```bash tar -xvf 文件名.tar ``` 如果第一步解压就出错,说明gzip文件损坏。 步骤4:如果文件损坏,重新下载。 另外,根据引用[3]中提到的问题,有时系统升级可能导致tar版本问题,但这种情况较少见。如果用户系统较旧,可以考虑更新tar工具。 但是,根据用户描述,错误信息是“Unrecognized archive format”,所以更可能是文件本身的问题。 因此,我们给出以下解决方案: ### 解决 `tar: Error opening archive: Unrecognized archive format` 错误 #### 1. 检查文件类型 运行以下命令确认文件格式: ```bash file 你的文件名.tar.gz ``` - ✅ 正常情况输出:`你的文件名.tar.gz: gzip compressed data, ...` - ❌ 异常情况:输出显示不是gzip格式(如:数据、HTML文档等) #### 2. 重新下载文件(推荐) 网络传输中文件可能损坏,重新下载可解决90%的问题。 #### 3. 分步解压 使用`gunzip`解压后,再用`tar`解包: ```bash gunzip 你的文件名.tar.gz tar -xvf 你的文件名.tar ``` - 若`gunzip`失败,提示`not in gzip format`,则文件损坏或非gzip格式。 #### 4. 使用其他解压工具 尝试用7-zip解压(跨平台工具): ```bash # 安装7-zip(MacOS用Homebrew) brew install p7zip # 解压 7z x 你的文件名.tar.gz # 若解压.tar文件,再解压 tar -xvf 你的文件名.tar ``` #### 5. 校验文件完整性 若提供源文件的校验值(如MD5、SHA256),运行: ```bash shasum -a 256 你的文件名.tar.gz # 对比SHA256 md5 你的文件名.tar.gz # 对比MD5 ``` --- ### 常见原因总结 | 原因 | 解决方式 | |------|----------| | 文件下载不完整 | 重新下载 | | 文件类型非gzip | 检查来源(如为zip文件则用`unzip`) | | 系统tar版本过旧 | 更新tar工具(`brew install gnu-tar`) | | 文件名含特殊字符 | 重命名为纯英文再解压 | --- §§ 相关问题 §§ 1. 如何修复损坏的压缩文件? 2. 如何批量解压多个tar.gz文件? 3. Linux下有哪些常用的压缩解压工具?</think>### 解决 `tar: Error opening archive: Unrecognized archive format` 错误 此错误表示 `tar` 命令无法识别文件格式,通常由以下原因导致: #### 1. **文件损坏或不完整**(最常见原因) - ✅ **验证文件完整性**: ```bash # 检查文件大小(对比原始文件大小) ls -lh 文件名.tar.gz # 计算校验和(需有原始校验值对比) shasum 文件名.tar.gz md5 文件名.tar.gz ``` - ✅ **重新下载文件**: 网络传输中断可能导致文件损坏,建议重新下载。 #### 2. **文件格式不匹配** - ✅ **检查实际文件类型**: ```bash file 文件名.tar.gz ``` - 如果输出 `gzip compressed data` &rarr; 是合法的 gzip 文件 - 如果输出 `HTML document` 或 `data` &rarr; 文件被篡改或下载错误 - ✅ **尝试其他解压方式**: ```bash # 尝试直接解压 gzip gunzip 文件名.tar.gz tar -xvf 文件名.tar # 尝试用 unzip 解压(如果是 zip 格式) unzip 文件名.tar.gz ``` #### 3. **文件名问题** - ✅ **重命名文件**: ```bash mv '含特殊字符的文件名.tar.gz' simple_name.tar.gz tar -xvf simple_name.tar.gz ``` #### 4. **tar 版本问题**(较少见) - ✅ **更新/替换 tar 工具**: ```bash # macOS 用户安装 GNU tar brew install gnu-tar gtar -xvf 文件名.tar.gz # Linux 用户更新 tar sudo apt update && sudo apt install tar ``` --- ### 操作流程图 ```mermaid graph TD A[遇到错误] --> B{检查文件类型<br>file filename.tar.gz} B -->|显示 gzip| C[重命名文件并重试] B -->|显示 HTML/Data| D[重新下载文件] C --> E[成功?] D --> E E -->|是| F[完成] E -->|否| G{尝试分步解压<br>gunzip + tar} G -->|成功| F G -->|失败| H[更新/安装GNU tar] H --> I[再次尝试] ``` --- ### 实际案例解析 根据引用[1]中的经验: > 安装 `graphviz` 时因依赖包 `gd` 损坏失败,单独安装依赖后解决: > ```bash > brew install gd # 先修复依赖 > brew install graphviz # 再安装主包 > ``` > 此方法适用于**多级依赖损坏**的场景[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值