Java解壓zip,rar的代碼

jopen 10年前發布 | 18K 次閱讀 Java Java開發

通過java實現解壓zip,rar的代碼。

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;  

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[1024];  
            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[i];  
                new File(destination, path).mkdir();  
            }  
            path = path + File.separator + dirs[dirs.length - 1];  
            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();  
    }  
}  

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!