athrunwang

          紀元
          數據加載中……
          用org.apache.tools.zip壓縮/解壓縮zip文件
          寫了一個用org.apache.tools.zip壓縮/解壓縮zip文件的例子,用來解決中文亂碼問題。代碼如下:
          Java代碼  收藏代碼
          1. package org.coolyongzi;  
          2.   
          3. import java.io.File;  
          4. import java.io.FileInputStream;  
          5. import java.io.FileOutputStream;  
          6. import java.io.InputStream;  
          7. import org.apache.tools.zip.ZipEntry;  
          8. import org.apache.tools.zip.ZipFile;  
          9. import org.apache.tools.zip.ZipOutputStream;  
          10. import java.io.IOException;  
          11. import java.util.Enumeration;  
          12. import org.apache.log4j.LogManager;  
          13. import org.apache.log4j.Logger;  
          14.   
          15.   
          16. public class ZipTools {  
          17.     public static final Logger logger = LogManager.getLogger(FileTools.class);  
          18.     public ZipTools()  
          19.     {  
          20.           
          21.     }  
          22.     /* 
          23.      * @description:Compressed files or folders 
          24.      * @param compressedFilePath String,zipFileRootPath String,zipFileName String 
          25.      * @return boolean 
          26.      */  
          27.     public static boolean compressFloderChangeToZip(String compressedFilePath,String zipFileRootPath,String zipFileName)   
          28.     throws IOException  
          29.     {  
          30.         File compressedFile = new File(compressedFilePath);  
          31.         if("".equalsIgnoreCase(zipFileName))  
          32.         {  
          33.             zipFileName = StringTools.getShortFileNameFromFilePath(compressedFilePath);  
          34.         }  
          35.         if(!StringTools.conversionSpecialCharacters(zipFileRootPath).endsWith(File.separator))  
          36.         {  
          37.             zipFileRootPath = zipFileRootPath + File.separator;  
          38.         }  
          39.         ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipFileRootPath + zipFileName));  
          40.         String base ="";  
          41.         logger.debug("compress [" + compressedFilePath + "] start!");  
          42.         boolean result = ZipTools.compressFloderChangeToZip(compressedFile,zipOutputStream,base);  
          43.         logger.debug("compress [" + compressedFilePath + "] end!");  
          44.         zipOutputStream.close();  
          45.         return result;  
          46.           
          47.     }  
          48.       
          49.     private static  boolean compressFloderChangeToZip(File compressedFile,ZipOutputStream zipOutputStream,String base)   
          50.     throws IOException  
          51.     {  
          52.         FileInputStream fileInputStream = null;  
          53.           
          54.         try{  
          55.             if(compressedFile.isDirectory())  
          56.             {  
          57.                 File[] childrenCompressedFileList = compressedFile.listFiles();  
          58.                 base = base.length() == 0 ? "" : base + File.separator;  
          59.                 for (int i = 0; i < childrenCompressedFileList.length; i++) {  
          60.                     ZipTools.compressFloderChangeToZip(childrenCompressedFileList[i],  
          61.                     zipOutputStream,base+childrenCompressedFileList[i].getName());  
          62.                 }  
          63.             }  
          64.             else  
          65.             {  
          66.                 if("".equalsIgnoreCase(base))  
          67.                 {  
          68.                     base = compressedFile.getName();  
          69.                 }  
          70.                 zipOutputStream.putNextEntry(new ZipEntry(base));  
          71.                 fileInputStream = new FileInputStream(compressedFile);  
          72.                 int b;  
          73.                 while((b=fileInputStream.read())!=-1)  
          74.                 {  
          75.                     zipOutputStream.write(b);  
          76.                 }  
          77.                 fileInputStream.close();  
          78.             }  
          79.             return true;  
          80.         }catch(Exception e)  
          81.         {  
          82.             e.getStackTrace();  
          83.             logger.error(e.getMessage());  
          84.             return false;  
          85.         }  
          86.     }  
          87.     /* 
          88.      * @param:zipFilePath String,releasePath String 
          89.      * @return void 
          90.      * @description:Decompress A File 
          91.      */  
          92.     @SuppressWarnings("unchecked")  
          93.     public static void decompressFile(String zipFilePath,String releasePath) throws IOException  
          94.     {  
          95.         ZipFile zipFile = new ZipFile(zipFilePath);  
          96.         Enumeration<ZipEntry> enumeration = zipFile.getEntries();  
          97.         InputStream inputStream = null;  
          98.         FileOutputStream fileOutputStream = null;  
          99.         ZipEntry zipEntry = null;  
          100.         String zipEntryNameStr ="";  
          101.         String[] zipEntryNameArray = null;  
          102.         while (enumeration.hasMoreElements()) {  
          103.             zipEntry = enumeration.nextElement();  
          104.             zipEntryNameStr = zipEntry.getName();  
          105.             zipEntryNameArray = zipEntryNameStr.split("/");  
          106.             String path = releasePath;  
          107.             File root = new File(releasePath);  
          108.             if(!root.exists())  
          109.             {  
          110.                 root.mkdir();  
          111.             }  
          112.             for (int i = 0; i < zipEntryNameArray.length; i++) {  
          113.                 if(i<zipEntryNameArray.length-1)  
          114.                 {  
          115.                     path = path + File.separator+zipEntryNameArray[i];        
          116.                     new File(StringTools.conversionSpecialCharacters(path)).mkdir();  
          117.                 }                 
          118.                 else  
          119.                 {  
          120.                     if(StringTools.conversionSpecialCharacters(zipEntryNameStr).endsWith(File.separator))  
          121.                     {  
          122.                         new File(releasePath + zipEntryNameStr).mkdir();  
          123.                     }  
          124.                     else  
          125.                     {  
          126.                         inputStream = zipFile.getInputStream(zipEntry);  
          127.                         fileOutputStream = new FileOutputStream(new File(  
          128.                                 StringTools.conversionSpecialCharacters(releasePath + zipEntryNameStr)));     
          129.                         byte[] buf = new byte[1024];  
          130.                         int len;  
          131.                         while ((len = inputStream.read(buf)) > 0)  
          132.                         {  
          133.                             fileOutputStream.write(buf, 0, len);  
          134.                         }  
          135.                         inputStream.close();  
          136.                         fileOutputStream.close();  
          137.                     }  
          138.                 }  
          139.             }  
          140.         }  
          141.         zipFile.close();  
          142.     }  
          143. }  

          junit測試類
          Java代碼  收藏代碼
          1. package org.coolyongzi.testcase;  
          2.   
          3. import java.io.IOException;  
          4.   
          5. import org.coolyongzi.ZipTools;  
          6.   
          7. import junit.framework.TestCase;  
          8.   
          9. public class ZipToolsTest extends TestCase {  
          10.   
          11.     protected void setUp() throws Exception {  
          12.         super.setUp();  
          13.     }  
          14.   
          15.     protected void tearDown() throws Exception {  
          16.         super.tearDown();  
          17.     }  
          18.   
          19.     public void testCompressFloderChangeToZip(){  
          20.         try {  
          21.             ZipTools.compressFloderChangeToZip("f:/iDocumentBanner2.gif", "f:", "test.zip");  
          22.         } catch (IOException e) {  
          23.             // TODO Auto-generated catch block  
          24.             e.printStackTrace();  
          25.         }  
          26.     }  
          27.       
          28.     public void testDecompressFile(){  
          29.         try {  
          30.             ZipTools.decompressFile("f:/java對解壓Zip格式的文件.zip","f:/test/");  
          31.         } catch (IOException e) {  
          32.             // TODO Auto-generated catch block  
          33.             e.printStackTrace();  
          34.             System.out.println(e.getMessage());  
          35.         }  
          36.     }  
          37. }

          posted on 2012-01-03 17:32 AthrunWang 閱讀(5270) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 芷江| 古田县| 南充市| 吴忠市| 汽车| 巴中市| 湖北省| 金坛市| 固始县| 乐都县| 威远县| 漠河县| 五家渠市| 康乐县| 土默特左旗| 绥芬河市| 贵阳市| 尤溪县| 汶川县| 赤峰市| 中江县| 洪洞县| 天台县| 云龙县| 兴隆县| 岱山县| 焦作市| 招远市| 肇庆市| 天水市| 苏州市| 祁门县| 渝中区| 德格县| 竹北市| 金堂县| 兴山县| 唐山市| 丰台区| 冕宁县| 蒲江县|