難能之理宜停,難處之人宜厚,難處之事宜緩,難成之功宜智。

          “道”就是指要自己才能走遍天下,“德”指兩個(gè)人要直心相對(duì).
          posts - 13, comments - 1, trackbacks - 0, articles - 0
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
          本文版權(quán)歸原作者,中國(guó)JAVA手機(jī)網(wǎng)收錄本文的目的是讓更多人閱讀到此文章。轉(zhuǎn)載請(qǐng)注明出處為中國(guó)JAVA手機(jī)網(wǎng)<www.cnjm.net>
          來自:http://www.cnjm.net/tech/article1069.html

          [轉(zhuǎn)載于IT狐]

          可隨意轉(zhuǎn)載,但請(qǐng)注明出處及作者
          SonyMusic
          2003.05.28
          ==========================================================================
          在Java中操作Zip文件,壓縮/解壓


          package test.nothing;

          import java.io.*;
          import java.util.*;
          import java.util.zip.*;

          import com.beaconsystem.util.*;

          import junit.framework.TestCase;

          /**
          * @author SonyMusic
          *
          * 用于測(cè)試java.util.zip包壓縮和解壓縮文件zip文件的例子.
          * 基于JUnit編寫,包括兩個(gè)test方法,和三個(gè)輔助方法.
          JAVA手機(jī)網(wǎng)[www.cnjm.net]
          * 注意到使用過程中操作的全是流,所以不僅僅可以讀寫文件。這只是一個(gè)簡(jiǎn)單的例子.
          */
          public class TestZipOp extends TestCase {

          /**
          * Constructor for TestZipOp.
          * @param arg0
          */
          public TestZipOp(String arg0) {
          super(arg0);
          }

          public static void main(String[] args) {
          junit.textui.TestRunner.run(TestZipOp.class);
          }

          /**
          * zip壓縮功能測(cè)試.
          * 將d:\temp\zipout目錄下的所有文件連同子目錄壓縮到d:\temp\out.zip.
          * @throws Exception
          */
          JAVA手機(jī)網(wǎng)[www.cnjm.net]
          public void testCreateZip() throws Exception{
          //壓縮baseDir下所有文件,包括子目錄
          String baseDir="d:\temp\zipout";
          List fileList=getSubFiles(new File(baseDir));

          JAVA手機(jī)網(wǎng)[www.cnjm.net]
          //壓縮文件名
          ZipOutputStream zos=new ZipOutputStream(new FileOutputStream("d:\temp\out.zip"));

          ZipEntry ze=null;
          byte[] buf=new byte[1024];
          int readLen=0;
          for (int i = 0; i <fileList.size(); i++) {
          File f=(File)fileList.get(i);
          System.out.print("Adding: "+f.getPath()+f.getName());

          //創(chuàng)建一個(gè)ZipEntry,并設(shè)置Name和其它的一些屬性
          ze=new ZipEntry(getAbsFileName(baseDir, f));
          ze.setSize(f.length());
          ze.setTime(f.lastModified());
          JAVA手機(jī)網(wǎng)[www.cnjm.net]

          //將ZipEntry加到zos中,再寫入實(shí)際的文件內(nèi)容
          zos.putNextEntry(ze);
          InputStream is=new BufferedInputStream(new FileInputStream(f));
          while ((readLen=is.read(buf, 0, 1024))!=-1) {
          zos.write(buf, 0, readLen);
          }
          is.close();
          System.out.println(" ? done...");
          }
          zos.close();
          }

          /**
          * 測(cè)試解壓縮功能.
          JAVA手機(jī)網(wǎng)[www.cnjm.net]
          * 將d:\download\test.zip文件解壓到d:\temp\zipout目錄下.
          * @throws Exception
          */
          public void testReadZip() throws Exception{
          JAVA手機(jī)網(wǎng)[www.cnjm.net]
          //InputStream is=new BufferedInputStream(new FileInputStream());
          String baseDir="d:\temp\zipout";
          ZipFile zfile=new ZipFile("d:\download\Test.zip");
          System.out.println(zfile.getName());
          Enumeration zList=zfile.entries();
          ZipEntry ze=null;
          byte[] buf=new byte[1024];
          while(zList.hasMoreElements()){
          //從ZipFile中得到一個(gè)ZipEntry
          ze=(ZipEntry)zList.nextElement();
          if(ze.isDirectory()){
          System.out.println("Dir: "+ze.getName()+" skipped..");
          continue;
          }
          System.out.println("Extracting: "+ze.getName()+"t"+ze.getSize()+"t"+ze.getCompressedSize());

          //以ZipEntry為參數(shù)得到一個(gè)InputStream,并寫到OutputStream中
          OutputStream os=new BufferedOutputStream(new FileOutputStream(getRealFileName(baseDir, ze.getName())));
          InputStream is=new BufferedInputStream(zfile.getInputStream(ze));
          int readLen=0;
          while ((readLen=is.read(buf, 0, 1024))!=-1) {
          os.write(buf, 0, readLen);
          }
          is.close();
          os.close();
          System.out.println("Extracted: "+ze.getName());
          }
          zfile.close();
          JAVA手機(jī)網(wǎng)[www.cnjm.net]
          }

          /**
          * 給定根目錄,返回一個(gè)相對(duì)路徑所對(duì)應(yīng)的實(shí)際文件名.
          * @param baseDir 指定根目錄
          * @param absFileName 相對(duì)路徑名,來自于ZipEntry中的name
          * @return java.io.File 實(shí)際的文件
          */
          JAVA手機(jī)網(wǎng)[www.cnjm.net]
          private File getRealFileName(String baseDir, String absFileName){
          String[] dirs=Regex.split("/", absFileName);
          //System.out.println(dirs.length);
          File ret=new File(baseDir);
          if(dirs.length>1){
          for (int i = 0; i <dirs.length-1; i++) {
          ret=new File(ret, dirs[i]);
          JAVA手機(jī)網(wǎng)[www.cnjm.net]
          }
          }
          if(!ret.exists()){
          ret.mkdirs();
          }
          JAVA手機(jī)網(wǎng)[www.cnjm.net]
          ret=new File(ret, dirs[dirs.length-1]);
          return ret;
          }

          /**
          * 給定根目錄,返回另一個(gè)文件名的相對(duì)路徑,用于zip文件中的路徑.
          * @param baseDir java.lang.String 根目錄
          * @param realFileName java.io.File 實(shí)際的文件名
          * @return 相對(duì)文件名
          */
          private String getAbsFileName(String baseDir, File realFileName){
          File real=realFileName;
          File base=new File(baseDir);
          String ret=real.getName();
          while (true) {
          real=real.getParentFile();
          if(real==null) break;
          if(real.equals(base)) break;
          else{
          ret=real.getName()+"/"+ret;
          }
          }
          return ret;
          }
          JAVA手機(jī)網(wǎng)[www.cnjm.net]

          /**
          * 取得指定目錄下的所有文件列表,包括子目錄.
          * @param baseDir File 指定的目錄
          * @return 包含java.io.File的List
          */
          private List getSubFiles(File baseDir){
          JAVA手機(jī)網(wǎng)[www.cnjm.net]
          List ret=new ArrayList();
          //File base=new File(baseDir);
          File[] tmp=baseDir.listFiles();
          for (int i = 0; i <tmp.length; i++) {
          JAVA手機(jī)網(wǎng)[www.cnjm.net]
          if(tmp[i].isFile()){
          JAVA手機(jī)網(wǎng)[www.cnjm.net]
          ret.add(tmp[i]);
          }
          JAVA手機(jī)網(wǎng)[www.cnjm.net]
          if(tmp[i].isDirectory()){
          ret.addAll(getSubFiles(tmp[i]));
          }
          }
          return ret;
          }

          }

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 华蓥市| 东乌珠穆沁旗| 洛阳市| 乌拉特中旗| 林口县| 长治市| 保康县| 灵台县| 灌云县| 望谟县| 定西市| 新源县| 策勒县| 巴林左旗| 兴安县| 祁阳县| 衡阳市| 长乐市| 高青县| 运城市| 徐汇区| 阿勒泰市| 屯昌县| 西丰县| 双柏县| 济南市| 西城区| 海丰县| 宁阳县| 岐山县| 铅山县| 基隆市| 原阳县| 乐东| 洮南市| 大新县| 英吉沙县| 辽宁省| 临沭县| 景德镇市| 六枝特区|