因为最近项目需要批量上传文件,而这里的批量就是将文件压缩在了一个zip包里,然后读取文件进行解析文件里的内容。
因此需要先对上传的zip包进行解压。以下直接提供代码供参考:
1.第一个方法是用于解压zip压缩包的方法。
2.第二个方法是 删除该文件夹以及子目录和子目录文件的方法。
3.第三个方法是 删除 删除文件夹内所有文件和子目录 的方法。
因为我们一般处理解析完数据之后需要删除上传的文件,以减小服务器的压力,所以提供第二、三方法以供参考。
我这里的解压zip包的方法返回的是解压后所得到的文件List,大家也可以根据需要返回自己需要的结果,或者不返回都行。
如果大家有什么更好的方法欢迎留言,请各位多多指教!
1 package com.forms.oa.weekreport.batchimport.service; 2 3 import java.io.File; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.io.InputStream; 7 import java.util.ArrayList; 8 import java.util.Enumeration; 9 import java.util.List; 10 11 import org.apache.tools.zip.ZipEntry; 12 import org.apache.tools.zip.ZipFile; 13 14 public class FileUtil { 15 16 /** 17 * 解压zip压缩包并返回解压之后所得到的文件List 18 * <br> 19 * @param zipPath 20 * @return 21 * List<File> 22 */ 23 public static List<File> UnZipFile(String zipPath) { 24 File file = new File(zipPath); 25 //设置 压缩包所在的目录下与压缩包同名文件夹 为 解压后的文件所在的目录 26 String unZipPath=zipPath.substring(0, zipPath.lastIndexOf(".")); 27 ZipFile zipFile = null; 28 List<File> fileList=new ArrayList<File>(); 29 try { 30 //设置编码格式 31 zipFile = new ZipFile(file,"GBK"); 32 } catch (IOException e1) { 33 e1.printStackTrace(); 34 } 35 Enumeration e = zipFile.getEntries(); 36 while(e.hasMoreElements()) { 37 ZipEntry zipEntry = (ZipEntry)e.nextElement(); 38 if(zipEntry.isDirectory()) { 39 String name = zipEntry.getName(); 40 name = name.substring(0,name.length()-1); 41 File f = new File(unZipPath+File.separator + name); 42 f.mkdirs(); 43 } else { 44 File f = new File(unZipPath +File.separator+ zipEntry.getName()); 45 fileList.add(f); 46 f.getParentFile().mkdirs(); 47 try { 48 f.createNewFile(); 49 InputStream is = zipFile.getInputStream(zipEntry); 50 FileOutputStream fos = new FileOutputStream(f); 51 int length = 0; 52 byte[] b = new byte[1024]; 53 while((length=is.read(b, 0, 1024))!=-1) { 54 fos.write(b, 0, length); 55 } 56 is.close(); 57 fos.close(); 58 } catch (IOException e1) { 59 e1.printStackTrace(); 60 } 61 } 62 } 63 if (zipFile != null) { 64 try { 65 zipFile.close(); 66 } catch (IOException e1) { 67 e1.printStackTrace(); 68 } 69 } 70 file.delete();//解压完以后将压缩包删除 71 return fileList; //返回解压后所得到的文件list 72 } 73 74 /** 75 * 删除该文件夹以及子目录和子目录文件 <br> 76 * @param folderPath void 77 */ 78 public static void delFolder(String folderPath) { 79 try { 80 delAllFile(folderPath); //删除完里面所有内容 81 File path = new File(folderPath); 82 path.delete(); //删除空文件夹 83 } catch (Exception e) { 84 e.printStackTrace(); 85 } 86 } 87 88 /** 89 * 删除文件夹内所有文件和子目录 <br> 90 * @param path 91 * @return boolean 92 */ 93 public static boolean delAllFile(String path) { 94 boolean flag = false; 95 File file = new File(path); 96 if (!file.exists()) { 97 return flag; 98 } 99 if (!file.isDirectory()) { 100 return flag; 101 } 102 String[] tempList = file.list(); 103 File temp = null; 104 for (int i = 0; i < tempList.length; i++) { 105 if (path.endsWith(File.separator)) { 106 temp = new File(path + tempList[i]); 107 } else { 108 temp = new File(path + File.separator + tempList[i]); 109 } 110 if (temp.isFile()) { 111 temp.delete(); 112 } 113 if (temp.isDirectory()) { 114 delAllFile(path + File.separator + tempList[i]);//先删除文件夹里面的文件 115 delFolder(path + File.separator + tempList[i]);//再删除空文件夹 116 flag = true; 117 } 118 } 119 return flag; 120 } 121 122 123 }