欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java对文件的操作(一) --------文件解压缩

程序员文章站 2022-03-03 09:05:59
...
package com.tw.file.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;

/**
* 文件解压缩类
* @author tw5566
*
*/
public class ZipUtils {
private static final String tt="";

/**
* 主方法
* @param arg
* @throws Exception
*/
public static void main(String arg[])throws Exception{
ZipUtils.unZip_java("F:/POIDemo/uedit32c.zip");//测试OK

}

/**
* <p>文件解缩方法2 java本身自带的解压包。
* 只会解压到当前目录下。</p>
* @param zipFileName 要解压文件的全路径
*/
public static void unZip_java(String zipFileName){
File infile = new File(zipFileName);

try {
// 检查是否是ZIP文件
ZipFile zip = new ZipFile(infile);
zip.close();

// 建立与目标文件的输入连接
ZipInputStream in = new ZipInputStream(new FileInputStream(infile));
ZipEntry file = in.getNextEntry();

int i = infile.getAbsolutePath().lastIndexOf('.');
String dirname = new String();
if (i != -1)
dirname = infile.getAbsolutePath().substring(0, i);
else
dirname = infile.getAbsolutePath();

File newdir = new File(dirname);
newdir.mkdir();

byte[] c = new byte[1024];
int len;
int slen;

while (file != null) {
i = make8859toGB(file.getName()).replace('/', '\\').lastIndexOf('\\');
if (i != -1) {
File dirs = new File(dirname
+ File.separator
+ make8859toGB(file.getName()).replace('/', '\\')
.substring(0, i));
dirs.mkdirs();
dirs = null;
}

System.out.print("Extract "
+ make8859toGB(file.getName()).replace('/', '\\')
+ " ........ ");

if (file.isDirectory()) {
File dirs = new File(make8859toGB(file.getName()).replace(
'/', '\\'));
dirs.mkdir();
dirs = null;
} else {
FileOutputStream out = new FileOutputStream(dirname
+ File.separator
+ make8859toGB(file.getName()).replace('/', '\\'));
while ((slen = in.read(c, 0, c.length)) != -1)
out.write(c, 0, slen);
out.close();
}
System.out.print("O.K.\n");
file = in.getNextEntry();
}
in.close();
} catch (ZipException zipe) {
System.out.println(infile.getName() + "不是一个ZIP文件!");
} catch (IOException ioe) {
System.out.println("读取文件时错误!");
} catch (Exception i) {
System.out.println("over");
}

}

public static String make8859toGB(String str) {
try {
String str8859 = new String(str.getBytes("8859_1"), "GB2312");
return str8859;
} catch (UnsupportedEncodingException ioe) {
return str;
}
}

}