Java API提供了解压缩GZIP和ZIP文件的功能。然而还有许多其他的压缩格式它并不支持。其中一种最普通格式就是TAR文档格式。这里有一个可以通过Java来读.tar文件的API。
Ice Tar API和java.util.zip API的使用方法很相似。一个.tar文件通过TarInputStream被读取为一系列TarEntry对象。一个TarEntry对象具有多种运算和特征信息,包括名称,是否是个目录,以及它所包含的数据。
以下是一个简单的代码片断:
String filename = "somefile.tar";
String directory = "somedirectory/";
OutputStream out = null;
try {
// open up the .tar file
TarInputStream in = new TarInputStream
( new FileInputStream(
new File(filename) )
);
TarEntry entry = null;
// loop over each file/directory in the .tar
while( (entry = in.getNextEntry()) != null) {
// ignore directories
if(entry.isDirectory()) {
continue;
}
// create a file to output to
File outfile = new File
(directory+entry.getName());
// make any missing directories
new File(outfile.getParent()).mkdirs();
// create an output stream to write to
out = new BufferedOutputStream
( new FileOutputStream( outfile ) );
// write out the tar-entry
int x = 0;
while( (x = in.read()) != -1) {
out.write(x);
}
out.close();
}
in.close();
} catch(IOException ioe) {
ioe.printStackTrace();
// close off streams etc..
}
下面介绍一个有用的指令:File.mkdirs()。我们来假设一个路径:
/home/javauser/com/generationjava/files/Example.java
事实上,现在只有/home/javauser/是已经存在的,那么mkdirs()将生成com/, generationjava/, 和 files/这些目录。
Ice Tar API使得应用Java的人不仅仅可以处理ZIP文档,而且还可以处理其他格式的文档。通过把java.util.zip.GzipInputStream应用到Ice Tar API中,tar.gz文件就可以很容易的读取了。