spring mvc 導入zip並解析其中數據(內excel)

直接附上代碼

    /**
     * 導入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;

    } 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章