`
billclod
  • 浏览: 8197 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java实现对tar文件的解压

阅读更多
最近做的项目中涉及到了对tar文件的解压,众所周知jdk中提供了对zip文件的操作,对tar文件并没有相关的api,这种情况下只能是依赖于第三方jar了。
我用的第三方jar包是javatar2.5,apache也有相关的api org.apache.tools.tar,网上有人说它是对javatar的封装,这个就不是我们关心的范围了,不过看过相关的文档后发现 使用方式确实很多地方是相同的(其实jdk中对zip文件的api使用也是这样)
我的想法很简单:以流的方式读入 以需要的格式写出
根据以上的想法我首先需要一个读tar文件的流,在javatar中有TarInputStream正好符合我的需求 第一步走出去了 以后就是一马平川了 呵呵 闲话不说 给出我的论证代码
mport java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import com.ice.tar.TarEntry;
import com.ice.tar.TarInputStream;
import com.zephyr.inflater.service.InflaterManager;

public class InflaterManagerImpl implements InflaterManager {
public void inflat(String path) {
InputStream inputstream = null;
OutputStream outputstream = null;
TarInputStream zis = null;
try {
File file = new File(path);
File tempFile = null;
inputstream = new FileInputStream(file);
zis = new TarInputStream(inputstream);
                        /*关键在于这个TarEntry 的理解,
                          实际你的tar包里有多少文件就有多          
                          少TarEntry*/
TarEntry tarEntry = null;
while ((tarEntry = zis.getNextEntry()) != null) {
tempFile = new File("d:\\sss\\" + tarEntry.getName());
tempFile.createNewFile();
outputstream = new FileOutputStream(tempFile);
//定一个缓存池 可以根据实际情况调整大小(事实证             
                                //明很有用)
                                byte[] buffer = new byte[1024 * 50];
while (true) {
int readsize = zis.read(buffer);
outputstream.write(buffer);
if (readsize < 1024 * 50) {
break;
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
outputstream.flush();
inputstream.close();
zis.close();
outputstream.close();
} catch (Exception e) {
e.printStackTrace();
}

}

}

}
写一个测试类
public class TarTest{
   public static void main(String[] args){
      InflaterManager ifm=new InflaterManagerImpl();
      ifm.inflat("d:/a.tar");
   }
}
呵呵 一段最简单功能的tar文件解析代码就完成了 如果需要压缩为tar文件的话javatar中也提供了相关的api有兴趣的话可以去看一看
分享到:
评论
2 楼 kidawinterII 2012-11-07  
云中苍月 写道
ANT的源代码中有这部分代码,但是存在中文文件名BUG,需要手工修改。

是的,中文文件名显示乱码,如何修改?
1 楼 云中苍月 2009-03-16  
ANT的源代码中有这部分代码,但是存在中文文件名BUG,需要手工修改。

相关推荐

    java解压和压缩tar包

    这段代码会将tar文件解压到指定的目录,`TarUtil.unTar()`内部会处理文件的读取和解压过程,包括处理中文文件名。 压缩tar文件的过程类似,使用`TarUtil`的`tar()`方法: 2. 创建一个`File`对象列表,包含所有要...

    Java压缩及解压tar、tar.z格式文件

    Java压缩及解压tar、tar.z格式文件, 需要apache的包ant-1.7.1.jar 这个自己去搜索下下载

    使用Java API进行tar.gz文件及文件夹压缩解压缩.docx

    } } }}二、从 tar.gz 文件解压文件在 Java 中,我们可以使用 Apache Commons Compress 库来解压 tar.gz 文件。下面的例子展示了如何将 tar.gz 文件解压到指定的目录。import org.apache.commons.compress.archivers...

    java 解析 tar gz文件 两种方法

    注意,使用这种方法,你需要实现自己的tar文件解析逻辑,这可能比较复杂,容易出错,而且功能可能不如使用成熟的库如Apache Commons Compress全面。 总结,Java中解析tar.gz文件可以借助第三方库如Apache Commons ...

    java 压缩/解压 .zip/.rar/.tar 文件

    总结来说,Java提供了对`.zip`文件的内置支持,而对于`.rar`和`.tar`文件,需要引入额外的第三方库。在实际项目中,应根据具体需求选择合适的库,并确保遵循相应的授权规定。同时,处理文件压缩和解压缩时要注意错误...

    java 解压和压缩 tar

    在实际应用中,开发者可以使用`javatar-2.5.jar`库和`TarUtil.java`类,通过编写Java代码实现对tar文件的解压和压缩操作。例如,他们可以创建一个简单的命令行工具,接收用户提供的文件路径,然后调用这些方法来执行...

    java解析tar文档

    7. **处理GZ或BZ2压缩的tar文件**:有时,tar文件可能被gzip或bzip2进一步压缩,为了解压这些文件,你需要先使用`GZIPInputStream`或`BZip2CompressorInputStream`,然后再创建`TarInputStream`。 在实际开发中,你...

    java读取tar.gz压缩文件的jar包

    java读取tar.gz压缩文件的jar包

    解压tar.Z文件,含jar包

    如果你的tar文件中包含jar包,那么解压之后,你可以直接使用Java的`jar`命令来处理它们。例如,查看jar包内容: ``` jar tf 你的jar文件名.jar ``` 或者,如果你需要提取某个文件: ``` jar xf 你的jar文件名....

    如何基于java实现解压ZIP TAR等文件

    下面是一个使用common-compress工具包解压TAR文件的示例代码: ```java public static boolean tarUnCompress(String filePath, String unzipPath) throws IOException { System.out.println("开始解压TAR...........

    JAVA 打包(jar\tar\zip)源码

    虽然Java原生支持解压tar文件,但创建tar文件通常需要第三方库如Apache Commons Compress。 再来看`zip`文件,它是跨平台的通用压缩格式,广泛应用于各种操作系统。Java标准库本身就包含了对zip文件的支持,`java....

    java 解析 tar gz.rar

    但是,它不直接支持.tar文件。因此,我们需要依赖第三方库或者自定义代码来处理.tar格式。 2. **使用第三方库** - **Apache Commons Compress**:Apache Commons Compress库提供了解析多种压缩格式的能力,包括....

    mysql-connector-java-5.1.40.tar.gz

    MySQL Connector/J是MySQL数据库与Java应用程序之间的桥梁,它是一个实现了JDBC(Java Database Connectivity...在Linux环境下,我们需要通过`tar`命令解压文件,然后在Java代码中加载驱动并使用JDBC接口来操作数据库。

    Java压缩解压缩tar.gz

    总之,使用Apache Commons Compress库,Java开发者可以方便地实现对`tar.gz`文件的压缩与解压缩。这个库提供了丰富的功能,不仅限于`tar.gz`,还包括其他多种压缩和归档格式。通过熟练掌握这些API,你可以在Java应用...

    Java中压缩与解压--中文文件名乱码解决办法

    为了解决这一问题,可以通过自定义`ZipOutputStream`和`ZipInputStream`类来实现对中文文件名的支持。下面将详细介绍具体的实现步骤: ### 1. 自定义ZipOutputStream类(CnZipOutputStream) #### (1) 创建并修改...

    安卓备份文件ab文件解压工具

    总的来说,“安卓备份文件ab文件解压工具”是Android用户和开发者处理备份数据的重要辅助工具,它简化了对`ab`文件的操作,使数据恢复和分析变得更为便捷。通过掌握这个工具的使用,用户可以更好地管理和保护自己的...

    gcc-java-4.1.2.tar.gz

    1. **解压**:使用`tar -zxvf gcc-java-4.1.2.tar.gz`命令来解压缩文件。 2. **配置**:运行`./configure`脚本来检测系统环境并准备构建。 3. **编译**:使用`make`命令来编译源代码。 4. **安装**:使用`make ...

    mysql-connector-java-5.1.40.tar

    - 解压`mysql-connector-java-5.1.40.tar`文件,通常会得到一个jar包,例如`mysql-connector-java-5.1.40.jar`。 - 将此jar添加到Java项目的类路径中。这可以通过IDE如Eclipse或IntelliJ IDEA的设置,或者在命令行...

    Java压缩技术(七) TAR——Commons实现

    `TarUtilsTest.java`文件中可能包含了对TAR文件解压的测试代码。解压TAR文件同样简单,只需创建一个`TarArchiveInputStream`并读取条目: ```java import org.apache.commons.compress.archivers.tar....

    libopencv_java412.tar.gz

    在这个例子中,`libopencv_java412.tar.gz`是一个压缩文件,解压后会得到`libopencv_java412`目录或文件,其中包含了必要的.so文件,这是Linux下的动态链接库,Java程序在运行时需要加载这些库才能调用OpenCV的功能...

Global site tag (gtag.js) - Google Analytics