R-B 发表于 2015-07-06 14:24

java解压zip,rar的代码

通过java实现解压zip,rar的代码。
原文:http://www.zuidaima.com/share/1550463229430784.htm
代码package com.zuidaima.main;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URL;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

import com.github.junrar.Archive;
import com.github.junrar.exception.RarException;
import com.github.junrar.rarfile.FileHeader;

/**
*@author www.zuidaima.com
**/
public class Main {

    public void extractZipFiles() {
      String root = "c:/javazip/";
      URL url = Main.class.getResource("/aa.zip");
      String filename = url.getFile();
      try {
            // destination folder to extract the contents
            byte[] buf = new byte;
            ZipInputStream zipinputstream = null;
            ZipEntry zipentry;
            zipinputstream = new ZipInputStream(new FileInputStream(filename));
            zipentry = zipinputstream.getNextEntry();
            while (zipentry != null) {

                // for each entry to be extracted
                String entryName = zipentry.getName();

                System.out.println(entryName);

                int n;
                FileOutputStream fileoutputstream;
                File newFile = new File(entryName);

                String directory = newFile.getParent();

                // to creating the parent directories
                if (directory == null) {
                  if (newFile.isDirectory()) {
                        break;
                  }
                } else {
                  new File(root + directory).mkdirs();
                }

                if (!zipentry.isDirectory()) {
                  System.out.println("File to be extracted....." + entryName);
                  fileoutputstream = new FileOutputStream(root + entryName);
                  while ((n = zipinputstream.read(buf, 0, 1024)) > -1) {
                        fileoutputstream.write(buf, 0, n);
                  }
                  fileoutputstream.close();
                }

                zipinputstream.closeEntry();
                zipentry = zipinputstream.getNextEntry();
            }
            zipinputstream.close();
      } catch (Exception e) {
            e.printStackTrace();
      }
    }

    public void extractRarFiles() {
      URL url = Main.class.getResource("/bb.rar");
      String filename = url.getFile();
      File archive = new File(filename);
      File destination = new File("c:/javazip/");

      Archive arch = null;
      try {
            arch = new Archive(archive);
      } catch (RarException e) {
            e.printStackTrace();
      } catch (IOException e) {
            e.printStackTrace();
      }
      if (arch != null) {
            if (arch.isEncrypted()) {
                System.out.println("archive is encrypted cannot extreact");
                return;
            }
            FileHeader fh = null;
            while (true) {
                fh = arch.nextFileHeader();
                if (fh == null) {
                  break;
                }
                if (fh.isEncrypted()) {
                  System.out.println("file is encrypted cannot extract: "
                            + fh.getFileNameString());
                  continue;
                }
                System.out.println("extracting: " + fh.getFileNameString());
                try {
                  if (fh.isDirectory()) {
                        createDirectory(fh, destination);
                  } else {
                        File f = createFile(fh, destination);
                        OutputStream stream = new FileOutputStream(f);
                        arch.extractFile(fh, stream);
                        stream.close();
                  }
                } catch (Exception e) {
                  e.printStackTrace();
                }
            }
      }
    }

    private File createFile(FileHeader fh, File destination) {
      File f = null;
      String name = null;
      if (fh.isFileHeader() && fh.isUnicode()) {
            name = fh.getFileNameW();
      } else {
            name = fh.getFileNameString();
      }
      f = new File(destination, name);
      if (!f.exists()) {
            try {
                f = makeFile(destination, name);
            } catch (IOException e) {
                e.printStackTrace();
            }
      }
      return f;
    }

    private File makeFile(File destination, String name) throws IOException {
      String[] dirs = name.split("\\\\");
      if (dirs == null) {
            return null;
      }
      String path = "";
      int size = dirs.length;
      if (size == 1) {
            return new File(destination, name);
      } else if (size > 1) {
            for (int i = 0; i < dirs.length - 1; i++) {
                path = path + File.separator + dirs;
                new File(destination, path).mkdir();
            }
            path = path + File.separator + dirs;
            File f = new File(destination, path);
            f.createNewFile();
            return f;
      } else {
            return null;
      }
    }

    private void createDirectory(FileHeader fh, File destination) {
      File f = null;
      if (fh.isDirectory() && fh.isUnicode()) {
            f = new File(destination, fh.getFileNameW());
            if (!f.exists()) {
                makeDirectory(destination, fh.getFileNameW());
            }
      } else if (fh.isDirectory() && !fh.isUnicode()) {
            f = new File(destination, fh.getFileNameString());
            if (!f.exists()) {
                makeDirectory(destination, fh.getFileNameString());
            }
      }
    }

    private void makeDirectory(File destination, String fileName) {
      String[] dirs = fileName.split("\\\\");
      if (dirs == null) {
            return;
      }
      String path = "";
      for (String dir : dirs) {
            path = path + File.separator + dir;
            new File(destination, path).mkdir();
      }
    }

    public static void main(String[] args) {
      Main main = new Main();
      // extract zip
      main.extractZipFiles();
      // extract rar
      main.extractRarFiles();
    }
}
页: [1]
查看完整版本: java解压zip,rar的代码