`

Java 对zip中文件基于大小的对比处理

    博客分类:
  • java
 
阅读更多

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;
}

 获得map后可以根据两个map中的key进行对比value值

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包运行时,内部的路径应为相对路径即首字符应为"/包名/文件名"形式才能被访问到

分享到:
评论

相关推荐

    基于java的人脸相似度比对,基于opencv和dl4j.zip

    在本项目中,我们探讨了如何使用Java进行人脸识别并计算人脸相似度,主要依赖于两个强大的库:OpenCV和DL4J。OpenCV是一个开源计算机视觉库,它包含了大量的图像和视频处理功能;而DL4J(Deep Learning for Java)是...

    java自带压缩方式的性能比较

    如果对压缩速度有较高要求,或者处理的文件数量较少,Zip可能是更好的选择。而如果对压缩比率有较高要求,或者不介意花费更多时间来压缩,Gzip可能更适合。 总结来说,这篇博客可能提供了关于Java中Gzip和Zip压缩...

    基于Java的Java缓存工具 SimpleCache.zip

    Java 缓存技术是优化应用程序性能的关键组成部分,尤其是在处理大量数据或者频繁访问的数据时。SimpleCache 是一个基于Java的轻量级缓存解决方案,旨在提高应用程序的响应速度和减少数据库的负载。通过将常用数据...

    10道腾讯的Java面试题答案.zip

    在本压缩包“10道腾讯的Java面试题答案.zip”中,包含了10个针对Java程序员在腾讯面试时可能遇到的问题及相应的解答。这些题目和答案以Markdown格式存储在名为“10道腾讯的Java面试题答案.md”的文件里。以下是这10...

    基于Java的重复文件检查工具 FindDup.zip

    FindDup是一款基于Java编程语言开发的实用工具,其主要功能是帮助用户在计算机系统中查找并管理重复的文件。Java的跨平台特性使得FindDup能够在多种操作系统上运行,包括Windows、Linux以及Mac OS等。这款工具通过...

    基于java语言的数据结构及算法实现,LeetCode算法示例.zip

    本资料包“基于Java语言的数据结构及算法实现,LeetCode算法示例.zip”显然是为了帮助学生和开发者深入理解这些关键概念,并通过实际编程练习加以巩固。 数据结构是组织和存储数据的方式,它决定了数据的访问效率和...

    基于java的ehcache(Java缓存框架 EhCache).zip

    - 键值对:EhCache基于键值对存储,其中键(Key)用于唯一标识一个缓存项,值(Value)是实际存储的数据。 - 缓存区域(Cache Regions):EhCache允许创建多个独立的缓存区域,每个区域有自己的配置和缓存策略。 ...

    java实现两个word文件进行比较

    Word文档通常以`.docx`格式存储,它实际上是基于ZIP压缩格式的XML文件集合。这意味着我们可以通过解压`.docx`文件,读取并解析XML来获取文档内容。然而,直接操作XML文件不仅复杂,而且容易出错,因此推荐使用第三方...

    基于Java的实例源码-JSCSS压缩工具 YUI Compressor.zip

    这个压缩工具基于Java编写,因此具有跨平台的特性,可以在多种操作系统上运行。 **1. 压缩原理** YUI Compressor通过删除不必要的空格、换行符和注释来减少文件大小。对于JavaScript,它还执行变量和函数名的混淆...

    基于jsp+servlet的稿件处理系统.zip

    总结来说,基于jsp+servlet的稿件处理系统是利用Java Web技术实现的稿件管理解决方案,结合JSP的动态网页能力和Servlet的后端处理能力,实现了稿件的全生命周期管理,提供了高效、安全的稿件处理平台。这样的系统...

    android_zip解压

    本知识点将基于提供的文件信息来深入探讨Android中的ZIP解压技术,包括如何实现基本的ZIP解压功能以及如何解决中文路径的支持问题。 #### 二、基本解压原理 在Android开发中,Java标准库提供了`java.util.zip`包,...

    ArcSoft_ArcFace_Java_Windows_x64_V3.0.zip

    它基于深度学习算法,能处理多种复杂情况,如人脸遮挡、侧脸、表情变化等,确保了在实际应用中的鲁棒性和准确性。 二、人脸比对算法 ArcFace的人脸比对算法则专注于识别和比较不同人脸之间的相似度。该算法采用了...

    基于Misty1算法的加密软件(JAVA)的实现(源代码+LW).zip

    本项目是基于Misty1算法的加密软件的Java实现,适合对加密算法和Java编程有研究需求的开发者,尤其是对于正在进行毕业设计的学生,这是一个很好的学习案例。 Misty1算法: 1. **概述**:Misty1是由日本东芝公司开发...

    基于Java的实例源码-写的巨型LCD液晶时钟显示屏.zip

    在本项目中,我们主要探讨的是一个基于Java编程语言实现的LCD液晶时钟显示屏实例。LCD(Liquid Crystal Display)液晶显示器是一种广泛应用于电子设备的显示技术,尤其在嵌入式系统和小型设备中非常常见。这个Java...

    Java OCR 识别组件(历史找回版本,基于Tesseract OCR 引擎)。能自动完成图片清理、识别 CAPT.zip

    Java OCR 识别组件是用于处理图像中的文字识别技术的一种实现,尤其在处理CAPTCHA验证码时十分有用。这个历史找回版本是基于Tesseract OCR引擎构建的,Tesseract是一个由Google维护的开源OCR系统,它有着强大的文字...

    基于java的计算器..AWT的图形界面,具有加法,减法,乘法,除法等计算功能.zip

    1. **窗口类**:使用`java.awt.Frame`或`java.awt.Dialog`作为主窗口,设置窗口大小、位置、标题等属性。 2. **按钮组件**:包括数字按钮(0-9)、运算符按钮(+、-、*、/)以及等于号按钮。每个按钮都关联了一个`...

    Java_resizableArray-master.zip_zip

    在Java中,数组一旦创建,其大小就固定不变,这有时会限制程序的灵活性。为了解决这个问题,Java提供了一种名为ArrayList的类,它实现了ResizableArray(可变数组)的概念。ArrayList是Java集合框架的一部分,属于...

    基于java的用户界面美化,有很多实例讲解,学习的好资料.zip

    不过,如果你对C#的UI设计也感兴趣,可以对比WPF(Windows Presentation Foundation)和JavaFX,两者都是面向对象的UI框架,提供了丰富的功能和可视化设计工具,但它们的语法和实现方式有所不同。 总的来说,学习...

    基于Misty1算法的加密软件(JAVA)的实现(源代码+论文).zip

    《基于Misty1算法的加密软件JAVA实现及毕业设计解析》 在当今信息化社会,数据安全至关重要,加密技术成为保障信息安全的重要手段。本资源“基于Misty1算法的加密软件(JAVA)的实现(源代码+论文)”提供了一个具体...

Global site tag (gtag.js) - Google Analytics