这里用的是appache的包 为了防止文件中文名乱码问题
java 操作 .zip 文件 压缩文件 解压文件 删除文件夹等
package com.gaeainfo.toponymbase.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.List;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;
public class ZipUtil {
private static MessageManager msgManager1 = new MessageManager(
"bundle.toponymbase");
private String comment = "";
public void setComment(String comment) {
this.comment = comment;
}
/**
* @param src:要压缩的目录
* @param dest:压缩文件存档
* @throws Exception
*/
public void zip(String src, String dest, List filter) throws Exception {
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(dest));
File srcFile = new File(src);
zip(out,srcFile,"",filter);
out.close();
}
/**
* @param out
* @param srcFile
* @param base:根路径
* @param filter:过滤
* @throws Exception
*/
public void zip(ZipOutputStream out, File srcFile, String base, List filter) throws Exception {
if(srcFile.exists()==false) {
throw new Exception("压缩目录不存在!");
}
if(srcFile.isDirectory()) {
File[] files = srcFile.listFiles();
base = base.length() == 0 ? "" : base + "/";
if (isExist(base, filter)) {
out.putNextEntry(new ZipEntry(base));
}
for(int i=0; i<files.length; i++) {
zip(out,files[i],base + files[i].getName(),filter);
}
} else {
if (isExist(base, filter)) {
base = base.length() == 0 ? srcFile.getName() : base ;
ZipEntry zipEntry = new ZipEntry(base);
zipEntry.setComment(comment);
out.putNextEntry(zipEntry);
FileInputStream in = new FileInputStream(srcFile);
int length = 0;
byte[] b = new byte[1024];
while((length=in.read(b,0,1024))!=-1) {
out.write(b,0,length);
}
in.close();
}
}
}
/**
* 过滤出要压缩的文件夹
* @param base
* @param list
* @return
*/
public boolean isExist(String base, List list) {
if (list != null && !list.isEmpty()) {
for (int i = 0; i < list.size(); i++) {
if (base.indexOf((String) list.get(i)) >= 0) {
return true;
}
}
}
return false;
}
/**
* @param srcFile:压缩文件路径
* @param dest:解压到的目录
* @param deleteFile:解压完成后是否删除文件
* @throws Exception
*/
public void unZip(String srcFile,String dest,boolean deleteFile) throws Exception {
File file = new File(srcFile);
if(!file.exists()) {
}
ZipFile zipFile ;
zipFile = new ZipFile(srcFile, "GB18030"); //这一句是解决中文乱码的关键
Enumeration e = zipFile.getEntries();
while(e.hasMoreElements()) {
ZipEntry zipEntry = (ZipEntry)e.nextElement();
if(zipEntry.isDirectory()) {
String name = zipEntry.getName();
name = name.substring(0,name.length()-1);
File f = new File(dest + name);
//System.out.println("+++"+f.getName());
f.mkdirs();
} else {
File f = new File(dest + zipEntry.getName());
//System.out.println("_______"+f.getName());
f.getParentFile().mkdirs();
f.createNewFile();
InputStream is = zipFile.getInputStream(zipEntry);
FileOutputStream fos = new FileOutputStream(f);
int length = 0;
byte[] b = new byte[1024];
while((length=is.read(b, 0, 1024))!=-1) {
fos.write(b, 0, length);
}
is.close();
fos.close();
}
}
if (zipFile != null) {
zipFile.close();
}
if(deleteFile) {
file.deleteOnExit();
}
}
/**
* 获取Zip文件的注释信息
* @param srcFile
* @return
*/
public static String getZipComment(String srcFile) {
String comment = "";
try {
ZipFile zipFile = new ZipFile(srcFile);
Enumeration e = zipFile.getEntries();
while (e.hasMoreElements()) {
ZipEntry ze = (ZipEntry) e.nextElement();
comment = ze.getComment();
if (comment != null && !comment.equals("")
&& !comment.equals("null")) {
break;
}
}
zipFile.close();
} catch (Exception e) {
System.out.println("获取zip文件注释信息失败:" + e.getMessage());
}
return comment;
}
/**
* desPath保存路劲
* srcPath原路径
* 将图片文件重一个文件夹 移动到一个文件夹
*/
public static void moveImageFile(String srcPath , String desPath)
{
File f = new File(srcPath);
if (!f.exists()) {
System.out.println(srcPath + " not exists");
return;
}
File fa[] = f.listFiles();
for (int i = 0; i < fa.length; i++) {
File fs = fa[i];
if (fs.isDirectory()) {
//目录
System.out.println(fs.getName() + " [目录]");
} else {
//文件(图片,音频,视频)
System.out.println(fs.getName());
String suffix = fs.getName().substring(
fs.getName().lastIndexOf("."));// 文件后缀名
//图片
if(".jpg".equalsIgnoreCase(suffix))
{
String tempurl = msgManager1
.getMessage("pic.path.temp");
//tempurl :E:\\neweclipsewprkspace\\toponymcensus\\app\\temp\\image\\
System.out.println("tempurl :" +tempurl);
String srcImgePath = srcPath+"\\"+fs.getName();
String desImagePath=srcPath+"\\"+"11"+"\\"+fs.getName();
File file = new File(srcImgePath);
try {
if(file.exists())
FileUtil.copyFile(srcImgePath, desImagePath);
if (file.exists()) {
//得到文件保存路劲
// 生成缩略图
String thumbnailsuffix = msgManager1
.getMessage("preview_pic_suffix");
String thumImagePath = desImagePath.replace(".", thumbnailsuffix+".");
PicUtil.createPreviewImage(srcImgePath,thumImagePath);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//视频
if(".mp4".equalsIgnoreCase(suffix))
{
String srcVideoPath = desPath+""+fs.getName();
String desVideopath = "";
File file = new File(srcVideoPath);
try {
String tempurl = msgManager1
.getMessage("video.path.temp");
//videourl :E:\\neweclipsewprkspace\\toponymcensus\\app\\temp\\audio\\
if(file.exists())
FileUtil.copyFile(srcVideoPath, desVideopath);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//音频
if(".3gp".equalsIgnoreCase(suffix))
{
String srcAudioPath = srcPath+""+fs.getName();
String desAudioPath = desPath+""+fs.getName();
File file = new File(srcAudioPath);
try {
if(file.exists())
FileUtil.copyFile(srcAudioPath, desAudioPath);
String tempurl = msgManager1
.getMessage("audio.path.temp");//文件的保存路径
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
/**
* 删除文件夹下面所有文件及目录
* @param delpath
*/
public static void deleteFiles(String delpath)
{
try {
File file = new File(delpath);
// 当且仅当此抽象路径名表示的文件存在且 是一个目录时,返回 true
if (!file.isDirectory())
{
file.delete();
}
else if (file.isDirectory())
{
String[] filelist = file.list();
for (int i = 0; i < filelist.length; i++)
{
File delfile = new File(delpath + "\\" + filelist[i]);
if (!delfile.isDirectory())
{
delfile.delete();
System.out.println(delfile.getAbsolutePath() + "删除文件成功");
}
else if (delfile.isDirectory())
{
deleteFiles(delpath + "\\" + filelist[i]);
}
}
System.out.println(file.getAbsolutePath()+"删除成功");
file.delete();
}
} catch (Exception e) {
System.out.println("deletefile() Exception:" + e.getMessage());
}
}
public static void main(String[] args) throws Exception {
//文件解压
// ZipUtil tz = new ZipUtil();
// tz.unZip("e://fuck.zip", "e://temp//", false);
//文件复制
String path = "C:\\Users\\Qt\\Desktop\\测试文件";
ZipUtil.moveImageFile(path, "");
// String path = "C:\\Users\\Qt\\Desktop\\测试文件\\11";
// ZipUtil.deleteFiles(path);
}
}