直接附上代碼
/**
* 導入Zip
* @param dc
* @param excelFile
* @return
* @throws IOException
*/
private DataCenter importZip(DataCenter dc, MultipartFile zipFile) {
boolean successFlag = true;
//獲得文件名
String fileName = zipFile.getOriginalFilename();
//檢查文件
if("".equals(fileName)){
successFlag = false ;
dc.setParameter("successFlag", successFlag);
dc.setParameter("message", "文件不存在");
return dc;
}
try{
//再本地創建一個文件,讀取此文件 防止瀏覽器讀取的文件被損壞
File localFile= new File("fyJyqdYhqdxxZip.zip");
FileOutputStream ftpOutstream = new FileOutputStream(localFile);
byte[] appByte = zipFile.getBytes() ;
ftpOutstream.write(appByte);
ftpOutstream.flush();
ftpOutstream.close();//創建完畢後刪除
File file = new File("fyJyqdYhqdxxZip.zip");
//不解壓直接讀取,加上gbk解決亂碼問題,file轉ZipInputStream
ZipInputStream in = new ZipInputStream(new FileInputStream(file),Charset.forName("GBK"));
//不解壓直接讀取,加上gbk解決亂碼問題,ZipInputStream轉BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(in,"gbk"));
//把InputStream轉成ByteArrayOutputStream 多次使用
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipEntry ze;
while ((ze = in.getNextEntry())!=null) {
if (ze.isDirectory()){
//如果是目錄,不處理
continue;
}
try {
String zipFileName = ze.getName();
//不是我們指定的文件不導入,XXXXX.市場化清單.xls
if (zipFileName != null && zipFileName.indexOf(".") != -1
&&zipFileName.equals(zipFileName.substring(0,zipFileName.indexOf(".xls"))+"市場化清單.xls")) {
continue;
}
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) > -1 ) {
baos.write(buffer, 0, len);
}
baos.flush();
InputStream stream1 = new ByteArrayInputStream(baos.toByteArray());
if(!readSchjsdExcelBySteam(stream1, ze.getName()))successFlag = false;//具體上傳代碼
baos.reset();
} catch (Exception e) {
successFlag = false;
e.printStackTrace();
}
}
br.close();
in.close();
baos.close();
//處理完畢刪除
localFile.delete();
}catch(IOException e){
successFlag = false;
e.printStackTrace();
}
dc.setParameter("successFlag", successFlag);
return dc;
}