자바 의 zip 파일 크기 대비 처리
2506 단어 자바
zip 파일 을 가 져 오 면 각 하위 파일 의 크기 와 하위 파일 의 이름 에 따라 map 를 구축 할 수 있 습 니 다. ZipFile. entries () 를 아래 방법 으로 전송 하면 구축 할 수 있 습 니 다.
private static Map<String, Long> getZipEntriesSizeMap(
Enumeration<? extends ZipEntry> entries) {
Map<String, Long> fileMap = new HashMap<String, Long>();
while (entries.hasMoreElements()) {
ZipEntry first = entries.nextElement();
fileMap.put(first.getName(), first.getSize());
}
return fileMap;
}
맵 을 획득 하면 두 맵 의 키 에 따라 값 을 비교 할 수 있 습 니 다
Iterator<String> ite = firstMap.keySet().iterator();
while (ite.hasNext()) {
String fileName = ite.next();
if (secondMap.containsKey(fileName)) {
if (firstMap.get(fileName).equals(secondMap.get(fileName))) {
// when the file in first zip and second zip is same i
// remove it
secondMap.remove(fileName);
} else {
// 添加到一个定义的输出列中
}
}
비교 할 때 두 번, 즉 첫 번 째 zip 가방 이 생 성 된 map 와 두 번 째 비 교 를 비교 한 후에 두 번 째 와 첫 번 째 를 다시 비교 해 야 합 니 다. 왜냐하면 쌍방 은 상대방 이 가지 고 있 지 않 은 파일 이 있 을 수 있 기 때 문 입 니 다.
하위 파일 이 jar 파일 이나 zip 파일 일 때 도 비교 코드 는 다음 과 같 습 니 다.
if (file.getName().lastIndexOf(".jar") != -1 || file.getName().lastIndexOf(".zip") != -1) {
InputStream in = zipfile.getInputStream(file);
temp = File.createTempFile("leotemp", ".tmp");
temp.deleteOnExit();
BufferedOutputStream out = new BufferedOutputStream(
new FileOutputStream(temp));
byte[] buffer = new byte[2048];
int nBytes = 0;
while ((nBytes = in.read(buffer)) > 0) {
out.write(buffer, 0, nBytes);
}
out.close();
ZipFile subzip = new ZipFile(temp);
subzip.entries();
if(parentPath != null && parentPath.trim() != ""){
fileMap.putAll(getZipEntriesSizeMap(subzip ,parentPath+" : "+file.getName()));
}else{
fileMap.putAll(getZipEntriesSizeMap(subzip ,file.getName()));
}
temp.delete();
}
parentPath 는 부모 파일 의 경로 이름 입 니 다. 처음 들 어 올 때 비어 있 거나 ''
일반적으로 저 는 xml 파일 로 출력 합 니 다. xml 파일 은 dom4j 의 jar 패 키 지 를 이용 하여 쉽게 만 들 고 주의 할 점 이 있 습 니 다. 도 구 를 jar 패키지 로 만 들 때 내부 경 로 는 상대 적 인 경로, 즉 첫 번 째 문 자 는 '/패키지 이름/파일 이름' 형식 으로 만 접근 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.