
因为最近项目需要批量上传文件,而这里的批量就是将文件压缩在了一个zip包里,然后读取文件进行解析文件里的内容。
因此需要先对上传的zip包进行解压。以下直接提供代码供参考:
1.第一个方法是用于解压zip压缩包的方法。
2.第二个方法是 删除该文件夹以及子目录和子目录文件的方法。
3.第三个方法是 删除 删除文件夹内所有文件和子目录 的方法。
因为我们一般处理解析完数据之后需要删除上传的文件,以减小服务器的压力,所以提供第二、三方法以供参考。
我这里的解压zip包的方法返回的是解压后所得到的文件List,大家也可以根据需要返回自己需要的结果,或者不返回都行。
如果大家有什么更好的方法欢迎留言,请各位多多指教!
package com.forms.oa.weekreport.batchimport.service; import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List; import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile; public class FileUtil { /**
* 解压zip压缩包并返回解压之后所得到的文件List
* <br>
* @param zipPath
* @return
* List<File>
*/
public static List<File> UnZipFile(String zipPath) {
File file = new File(zipPath);
//设置 压缩包所在的目录下与压缩包同名文件夹 为 解压后的文件所在的目录
String unZipPath=zipPath.substring(0, zipPath.lastIndexOf("."));
ZipFile zipFile = null;
List<File> fileList=new ArrayList<File>();
try {
//设置编码格式
zipFile = new ZipFile(file,"GBK");
} catch (IOException e1) {
e1.printStackTrace();
}
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(unZipPath+File.separator + name);
f.mkdirs();
} else {
File f = new File(unZipPath +File.separator+ zipEntry.getName());
fileList.add(f);
f.getParentFile().mkdirs();
try {
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();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
if (zipFile != null) {
try {
zipFile.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
file.delete();//解压完以后将压缩包删除
return fileList; //返回解压后所得到的文件list
} /**
* 删除该文件夹以及子目录和子目录文件 <br>
* @param folderPath void
*/
public static void delFolder(String folderPath) {
try {
delAllFile(folderPath); //删除完里面所有内容
File path = new File(folderPath);
path.delete(); //删除空文件夹
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 删除文件夹内所有文件和子目录 <br>
* @param path
* @return boolean
*/
public static boolean delAllFile(String path) {
boolean flag = false;
File file = new File(path);
if (!file.exists()) {
return flag;
}
if (!file.isDirectory()) {
return flag;
}
String[] tempList = file.list();
File temp = null;
for (int i = 0; i < tempList.length; i++) {
if (path.endsWith(File.separator)) {
temp = new File(path + tempList[i]);
} else {
temp = new File(path + File.separator + tempList[i]);
}
if (temp.isFile()) {
temp.delete();
}
if (temp.isDirectory()) {
delAllFile(path + File.separator + tempList[i]);//先删除文件夹里面的文件
delFolder(path + File.separator + tempList[i]);//再删除空文件夹
flag = true;
}
}
return flag;
} }