Java解压缩ZIP文件同时包含Jar包解决ZIP包中含有中文名称信息的文件

我们知道压缩文件中有第一个文件夹为原始文件夹:例如我们对一个目录名称为plug的文件夹进行压缩(plug文件夹下含有其他的文件夹和文件),那么压缩后的文件名称为plug.zip文件,压缩包中第一个文件夹的名称为plug,plug文件夹下才是我们需要的文件,而进行加压缩时,我们可能就不需要plug这个文件夹名称了,而是我们需要建立的文件夹名称例如为:pert文件夹,而pert文件中存放的是从plug文件夹下解压缩出来的文件。

/**
*
* 解压缩文件
* @param inFilePath:待压缩完的文件的路径
* @param inFileName:输入需要解压缩的文件的文件名
* @param outFilePath:输出解压缩完的文件的路径
* @return
*/
public boolean uncoilZIP(String inFilePath, String inFileName,String outFilePath) {
int BUFFER = 2048;
boolean flag = false;
BufferedOutputStream output = null;
BufferedInputStream input = null;
ZipInputStream zip = null;
ZipEntry entry = null;
try {
zip = new ZipInputStream(new FileInputStream(inFilePath + inFileName));
int i = 1;
int start = 0;
while ((entry=zip.getNextEntry())!=null) {
if(i==1){
if(entry.isDirectory()){
start = entry.getName().length();
}
}
if (entry.isDirectory()) {
new File(outFilePath + entry.getName().substring(start)).mkdirs();
i++;
continue;
}else{
new File(outFilePath).mkdirs();
i++;
}
int count;
byte data[] = new byte[BUFFER];
FileOutputStream fos = new FileOutputStream(outFilePath + entry.getName().substring(start));
while ((count = zip.read(data, 0, BUFFER)) != -1) {
fos.write(data, 0, count);
}
fos.flush();
}
flag = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (output != null) {
output.close();
}
if (input != null) {
input.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return flag;
}


public static void main(String[] arg) {
new UtilZIP().uncoilZIP("D:\\", "ww.zip", "D:\\outzip\\");
}

你可能感兴趣的:(java)