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。OpenCV是一个开源计算机视觉库,它包含了大量的图像和视频处理功能;而DL4J(Deep Learning for Java)是...
如果对压缩速度有较高要求,或者处理的文件数量较少,Zip可能是更好的选择。而如果对压缩比率有较高要求,或者不介意花费更多时间来压缩,Gzip可能更适合。 总结来说,这篇博客可能提供了关于Java中Gzip和Zip压缩...
Java 缓存技术是优化应用程序性能的关键组成部分,尤其是在处理大量数据或者频繁访问的数据时。SimpleCache 是一个基于Java的轻量级缓存解决方案,旨在提高应用程序的响应速度和减少数据库的负载。通过将常用数据...
在本压缩包“10道腾讯的Java面试题答案.zip”中,包含了10个针对Java程序员在腾讯面试时可能遇到的问题及相应的解答。这些题目和答案以Markdown格式存储在名为“10道腾讯的Java面试题答案.md”的文件里。以下是这10...
FindDup是一款基于Java编程语言开发的实用工具,其主要功能是帮助用户在计算机系统中查找并管理重复的文件。Java的跨平台特性使得FindDup能够在多种操作系统上运行,包括Windows、Linux以及Mac OS等。这款工具通过...
本资料包“基于Java语言的数据结构及算法实现,LeetCode算法示例.zip”显然是为了帮助学生和开发者深入理解这些关键概念,并通过实际编程练习加以巩固。 数据结构是组织和存储数据的方式,它决定了数据的访问效率和...
- 键值对:EhCache基于键值对存储,其中键(Key)用于唯一标识一个缓存项,值(Value)是实际存储的数据。 - 缓存区域(Cache Regions):EhCache允许创建多个独立的缓存区域,每个区域有自己的配置和缓存策略。 ...
这个压缩工具基于Java编写,因此具有跨平台的特性,可以在多种操作系统上运行。 **1. 压缩原理** YUI Compressor通过删除不必要的空格、换行符和注释来减少文件大小。对于JavaScript,它还执行变量和函数名的混淆...
总结来说,基于jsp+servlet的稿件处理系统是利用Java Web技术实现的稿件管理解决方案,结合JSP的动态网页能力和Servlet的后端处理能力,实现了稿件的全生命周期管理,提供了高效、安全的稿件处理平台。这样的系统...
本知识点将基于提供的文件信息来深入探讨Android中的ZIP解压技术,包括如何实现基本的ZIP解压功能以及如何解决中文路径的支持问题。 #### 二、基本解压原理 在Android开发中,Java标准库提供了`java.util.zip`包,...
Word文档通常以`.docx`格式存储,它实际上是基于ZIP压缩格式的XML文件集合。这意味着我们可以通过解压`.docx`文件,读取并解析XML来获取文档内容。然而,直接操作XML文件不仅复杂,而且容易出错,因此推荐使用第三方...
它基于深度学习算法,能处理多种复杂情况,如人脸遮挡、侧脸、表情变化等,确保了在实际应用中的鲁棒性和准确性。 二、人脸比对算法 ArcFace的人脸比对算法则专注于识别和比较不同人脸之间的相似度。该算法采用了...
本项目是基于Misty1算法的加密软件的Java实现,适合对加密算法和Java编程有研究需求的开发者,尤其是对于正在进行毕业设计的学生,这是一个很好的学习案例。 Misty1算法: 1. **概述**:Misty1是由日本东芝公司开发...
在本项目中,我们主要探讨的是一个基于Java编程语言实现的LCD液晶时钟显示屏实例。LCD(Liquid Crystal Display)液晶显示器是一种广泛应用于电子设备的显示技术,尤其在嵌入式系统和小型设备中非常常见。这个Java...
Java OCR 识别组件是用于处理图像中的文字识别技术的一种实现,尤其在处理CAPTCHA验证码时十分有用。这个历史找回版本是基于Tesseract OCR引擎构建的,Tesseract是一个由Google维护的开源OCR系统,它有着强大的文字...
1. **窗口类**:使用`java.awt.Frame`或`java.awt.Dialog`作为主窗口,设置窗口大小、位置、标题等属性。 2. **按钮组件**:包括数字按钮(0-9)、运算符按钮(+、-、*、/)以及等于号按钮。每个按钮都关联了一个`...
在Java中,数组一旦创建,其大小就固定不变,这有时会限制程序的灵活性。为了解决这个问题,Java提供了一种名为ArrayList的类,它实现了ResizableArray(可变数组)的概念。ArrayList是Java集合框架的一部分,属于...
不过,如果你对C#的UI设计也感兴趣,可以对比WPF(Windows Presentation Foundation)和JavaFX,两者都是面向对象的UI框架,提供了丰富的功能和可视化设计工具,但它们的语法和实现方式有所不同。 总的来说,学习...
《基于Misty1算法的加密软件JAVA实现及毕业设计解析》 在当今信息化社会,数据安全至关重要,加密技术成为保障信息安全的重要手段。本资源“基于Misty1算法的加密软件(JAVA)的实现(源代码+论文)”提供了一个具体...