下面实现的功能是zip文件中的图像文件解压到当前目录下,用jdk自带的处理zip文件的代码处理的,但是不能处理中文名称的文件,要不然就会出错。
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
/**
* 不能处理中文文件名
*/
public class UnZip
{
private static final int buffer = 2048;
public static void main(String[] args)
{
unZip("D:\\ss\\test.zip");
}
public static void unZip(String path)
{
int count = -1;
int index = -1;
String savepath = "";
boolean flag = false;
savepath = path.substring(0, path.lastIndexOf("\\")) + "\\";
try
{
BufferedOutputStream bos = null;
ZipEntry entry = null;
FileInputStream fis = new FileInputStream(path);
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
while((entry = zis.getNextEntry()) != null)
{
byte data[] = new byte[buffer];
String temp = entry.getName();
flag = isPics(temp);
if(!flag)
continue;
index = temp.lastIndexOf("/");
if(index > -1)
temp = temp.substring(index+1);
temp = savepath + temp;
File f = new File(temp);
f.createNewFile();
FileOutputStream fos = new FileOutputStream(f);
bos = new BufferedOutputStream(fos, buffer);
while((count = zis.read(data, 0, buffer)) != -1)
{
bos.write(data, 0, count);
}
bos.flush();
bos.close();
}
zis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static boolean isPics(String filename)
{
boolean flag = false;
if(filename.endsWith(".jpg") || filename.endsWith(".gif") || filename.endsWith(".bmp") || filename.endsWith(".png"))
flag = true;
return flag;
}
}
下面是用的apache的zip文件处理包进行处理的,可以处理中文名称的文件,功能跟上面的一样。
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
/**
* 可以处理中文文件名
*/
public class UnZip2
{
private static final int buffer = 2048;
public static void main(String[] args)
{
unZip("D:\\ss\\test.zip");
}
public static void unZip(String path)
{
int count = -1;
int index = -1;
String savepath = "";
boolean flag = false;
File file = null;
InputStream is = null;
FileOutputStream fos = null;
BufferedOutputStream bos = null;
savepath = path.substring(0, path.lastIndexOf("\\")) + "\\";
try
{
ZipFile zipFile = new ZipFile(path);
Enumeration<?> entries = zipFile.getEntries();
while(entries.hasMoreElements())
{
byte buf[] = new byte[buffer];
ZipEntry entry = (ZipEntry)entries.nextElement();
String filename = entry.getName();
index = filename.lastIndexOf("/");
if(index > -1)
filename = filename.substring(index+1);
filename = savepath + filename;
flag = isPics(filename);
if(!flag)
continue;
file = new File(filename);
file.createNewFile();
is = zipFile.getInputStream(entry);
fos = new FileOutputStream(file);
bos = new BufferedOutputStream(fos, buffer);
while((count = is.read(buf)) > -1)
{
bos.write(buf, 0, count );
}
fos.close();
is.close();
}
zipFile.close();
}catch(IOException ioe){
ioe.printStackTrace();
}
}
public static boolean isPics(String filename)
{
boolean flag = false;
if(filename.endsWith(".jpg") || filename.endsWith(".gif") || filename.endsWith(".bmp") || filename.endsWith(".png"))
flag = true;
return flag;
}
}