자바 의 zip 파일 크기 대비 처리

2506 단어 자바
zip 파일 은 ZipFile 클래스 를 통 해 초기 화 될 때 파일 이름 filename new ZipFile (filename) 을 입력 할 수 있 습 니 다.
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 패키지 로 만 들 때 내부 경 로 는 상대 적 인 경로, 즉 첫 번 째 문 자 는 '/패키지 이름/파일 이름' 형식 으로 만 접근 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기