java 압축 풀기 / rar 파일 읽 기

8093 단어 자바
작성 자 에 게 감 사 드 립 니 다:https://blog.csdn.net/lbf5210/article/details/51206642
   com.github.junrar    junrar    3.0.0
자바 압축 해제 (zip 와 rar 파일) 인 스 턴 스 실현 - 중국어 코드 문제 해결
1. 실현 설명:
아래 에 들 어 온 가방 에서 볼 수 있 습 니 다.
1) 압축, 압축 풀기 zip 는 apache 의 zip 가방 으로 jar 가방 (jar - ant. rar) 을 도입 해 야 합 니 다.
2) 압축, 압축 풀기 rar 에 필요 한 것 은 준 rar 입 니 다. 여 기 는 제3자 jar 가방 을 도입 해 야 합 니 다. 저 는 준 rar - 0.7. jar 를 사용 합 니 다.
아래 의 두 가지 방법 은 압축 파일 의 인 스 턴 스 를 실현 하 는 것 입 니 다. 압축 파일 의 실현 도 간단 합 니 다. 여러분 들 은 실현 방식 을 찾 아 보 실 수 있 습 니 다. 여기 서 저 는 압축 파일 에 관심 이 없습니다 (상대 적 으로 적 습 니 다)
  import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.util.Enumeration; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import com.github.junrar.Archive; import com.github.junrar.rarfile.FileHeader;     /**  *   * @author liuBf   * 클래스 설명: 압축 해제 파일 공용 클래스 * */ public class UnZipOrRarUtils {         /*** 여기 synchronized, 즉 병발 문제 방지 * * /    public static synchronized void untar(String tarFileName, String extPlace)             throws Exception {         unRarFile(tarFileName, extPlace);     }         public static synchronized void unzip(String zipFileName, String extPlace)             throws Exception {         unZipFiles(zipFileName, extPlace);     }         /**      * zip 형식의 압축 파일 을 지정 한 위치 로 압축 해제 합 니 다.     *       * @param zipFileName      *            압축 파일     * @param extPlace      *            디 렉 터 리 압축 풀기     * @throws Exception      */     @SuppressWarnings("unchecked")     public static boolean unZipFiles(String zipFileName, String extPlace)             throws Exception {         System.setProperty("sun.zip.encoding",                 System.getProperty("sun.jnu.encoding"));         try {             (new File(extPlace)).mkdirs();             File f = new File(zipFileName);             ZipFile zip File = new ZipFile (zipFileName, "GBK"); / / 중국어 파일 이름 난 장 판 처리 문제            if ((!f.exists()) && (f.length() <= 0)) {                 throw new Exception ("압축 을 풀 파일 이 존재 하지 않 습 니 다!");            }             String strPath, gbkPath, strtemp;             File tempFile = new File(extPlace);             strPath = tempFile.getAbsolutePath();             Enumeration> e = zipFile.getEntries();             while (e.hasMoreElements()) {                 ZipEntry zipEnt = (ZipEntry) e.nextElement();                 gbkPath = zipEnt.getName();                 if (zipEnt.isDirectory()) {                     strtemp = strPath + File.separator + gbkPath;                     File dir = new File(strtemp);                     dir.mkdirs();                     continue;                 } else {/ 파일 읽 기                    InputStream is = zipFile.getInputStream(zipEnt);                     BufferedInputStream bis = new BufferedInputStream(is);                     gbkPath = zipEnt.getName();                     strtemp = strPath + File. separator + gbkPath; / 디 렉 터 리 만 들 기                    String strsubdir = gbkPath;                     for (int i = 0; i < strsubdir.length(); i++) {                         if (strsubdir.substring(i, i + 1).equalsIgnoreCase("/")) {                             String temp = strPath + File.separator                                     + strsubdir.substring(0, i);                             File subdir = new File(temp);                             if (!subdir.exists())                                 subdir.mkdir();                         }                     }                     FileOutputStream fos = new FileOutputStream(strtemp);                     BufferedOutputStream bos = new BufferedOutputStream(fos);                     int c;                     while ((c = bis.read()) != -1) {                         bos.write((byte) c);                     }                     bos.close();                     fos.close();                 }             }             return true;         } catch (Exception e) {             e.printStackTrace();             return false;         }     }     /**      * 원본 rar 경로 에 따라 지정 한 폴 더 아래로 압축 을 풀 수 있 습 니 다.     *       * @param srcRarPath      *            원시 rar 경로     * @param dstDirectoryPath      *            압축 해제 한 폴 더     */     public static void unRarFile(String srcRarPath, String dstDirectoryPath) {         if (!srcRarPath.toLowerCase().endsWith(".rar")) {             System. out. println ("비 rar 파일!");            return;         }         File dstDiretory = new File(dstDirectoryPath);         if (! dstDiretory. exists ()) {/ 대상 디 렉 터 리 가 존재 하지 않 을 때 이 폴 더 를 만 듭 니 다.            dstDiretory.mkdirs();         }         Archive a = null;         try {             a = new Archive(new File(srcRarPath));             if (a != null) {                 // a. getMainHeader (). print (); / 파일 정 보 를 인쇄 합 니 다.                FileHeader fh = a.nextFileHeader();                 while (fh != null) {                     // 파일 이름 중국어 오류 방지 처리                    String fileName = fh.getFileNameW().isEmpty() ? fh                             .getFileNameString() : fh.getFileNameW();                     if (fh. isDirectory () {/ 폴 더                        File fol = new File(dstDirectoryPath + File.separator                                 + fileName);                         fol.mkdirs();                     } else {/ / 파일                        File out = new File(dstDirectoryPath + File.separator                                 + fileName.trim());                         try {                             if (!out.exists()) {                                 if (! out. getParentFile (). exists ()) {/ 상대 경로 가 다단 계 일 수 있 습 니 다. 부모 디 렉 터 리 를 만들어 야 할 수도 있 습 니 다.                                    out.getParentFile().mkdirs();                                 }                                 out.createNewFile();                             }                             FileOutputStream os = new FileOutputStream(out);                             a.extractFile(fh, os);                             os.close();                         } catch (Exception ex) {                             ex.printStackTrace();                         }                     }                     fh = a.nextFileHeader();                 }                 a.close();             }         } catch (Exception e) {             e.printStackTrace();         }     } }
- - - - - 저작권 성명: 본 고 는 CSDN 블 로 거 '카 치 파티' 의 오리지널 글 입 니 다. CC 4.0 BY - SA 저작권 협의 에 따라 원문 출처 링크 와 본 성명 을 첨부 하 십시오. 원문 링크:https://blog.csdn.net/lbf5210/article/details/51206642
public static void main(String[] args) {
    String rarPath = "C:\\Users\\DELL\\Desktop\\sim\\1.rar";
    File rarFile = new File(rarPath);
    try {
        UnZipAnRar.unRar(rarFile, "C:\\Users\\DELL\\Desktop\\");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

rar 파일 이름 읽 기
import com.github.junrar.Archive;
import com.github.junrar.rarfile.FileHeader;

import java.io.*;
import java.util.Enumeration;

public class UnZipAnRar {
    public static void unRar(File rarFile, String outDir) throws Exception {
        File outFileDir = new File(outDir);
        if (!outFileDir.exists()) {
            boolean isMakDir = outFileDir.mkdirs();
            if (isMakDir) {
                System.out.println("        ");
            }
        }
        Archive archive = new Archive(new FileInputStream(rarFile));
        FileHeader fileHeader = archive.nextFileHeader();
        while (fileHeader != null) {
            String fileName = fileHeader.getFileNameW().isEmpty() ? fileHeader
                    .getFileNameString() : fileHeader.getFileNameW();
            System.out.println(fileName);
            if (fileHeader.isDirectory()) {
                fileHeader = archive.nextFileHeader();
                continue;
            }
            fileHeader = archive.nextFileHeader();
        }
        archive.close();
    }
}

좋은 웹페이지 즐겨찾기