packageapp.qdupr.Method;importjava.io.BufferedInputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importorg.apache.commons.compress.archivers.tar.TarArchiveEntry;importorg.apache.commons.compress.archivers.tar.TarArchiveInputStream;importorg.apache.commons.compress.compressors.z.ZCompressorInputStream;/*** 自动解压.Z格式的文件
*@authorAdministrator
**/
public classZCompress {/*** 测试方法
*@paramargs*/
public static voidmain(String[] args) {
ZCompress zip= newZCompress();
File dir= new File("E:\\Test");
File[] subs=dir.listFiles();for(File sub : subs) {
String file=sub.getParent()+File.separator+sub.getName();
zip.uncompress(file);
System.out.println(file);
}
}/*** 获取文件夹下全部文件
*@paramfile*/
public static voidfindAllfile(String file) {
ZCompress zip= newZCompress();
File dir= newFile(file);
File[] subs=dir.listFiles();for(File sub : subs) {
String newfile=sub.getParent()+File.separator+sub.getName();
zip.uncompress(newfile);
}
}/*** .Z文件解压
*@paramfile*/
public voiduncompress(String file) {//File file =new File("E:\\BEA20151101.Z");
ZCompress.deCompressTZFile(file);
}/*** 将String型转换为File类型
*@paramfile
*@return
*/
public staticFile deCompressTZFile(String file) {return deCompressZFile(newFile(file));
}/*** 执行解压
*@paramfile
*@return
*/
private staticFile deCompressZFile(File file) {int buffersize = 2048;
FileOutputStream out= null;
ZCompressorInputStream zIn= null;try{
FileInputStream fin= newFileInputStream(file);
BufferedInputStream in= newBufferedInputStream(fin);//解压后的文件存放路径及文件名
String name = file.getName().substring(0, file.getName().indexOf("."));
File outFile= new File("E:\\File\\"+name);
out= newFileOutputStream(outFile);
zIn= newZCompressorInputStream(in);final byte[] buffer = new byte[buffersize];int n = 0;while (-1 != (n =zIn.read(buffer))) {
out.write(buffer,0, n);
}returnoutFile;
}catch(Exception e) {
e.printStackTrace();return null;
}finally{try{
out.close();
zIn.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}/*** .TAR格式文件解压
*@paramfile*/
private static voiddeCompressTARFile(File file) {int buffersize = 2048;
String basePath= file.getParent() +File.separator;
TarArchiveInputStream is= null;try{
is= new TarArchiveInputStream(newFileInputStream(file));while (true) {
TarArchiveEntry entry=is.getNextTarEntry();if (entry == null) {break;
}if (entry.isDirectory()) {//这里貌似不会运行到,跟ZipEntry有点不一样
new File(basePath +entry.getName()).mkdirs();
}else{
FileOutputStream os= null;try{
File f= new File(basePath +entry.getName());if (!f.getParentFile().exists()) {
f.getParentFile().mkdirs();
}if (!f.exists()) {
f.createNewFile();
}
os= newFileOutputStream(f);byte[] bs = new byte[buffersize];int len = -1;while ((len = is.read(bs)) != -1) {
os.write(bs,0, len);
}
os.flush();
}catch(Exception e) {
e.printStackTrace();
}finally{
os.close();
}
}
}
}catch(Exception e) {
e.printStackTrace();
}finally{try{
is.close();
file.delete();
}catch(IOException e) {
e.printStackTrace();
}
}
}
}