java 압축 풀기 / rar 파일 읽 기
8093 단어 자바
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();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.