`
huahongluo
  • 浏览: 38407 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

java 获取zip里附加注释

阅读更多
jdk里面提供了往zip包里添加注释的api方法ZipOutputStream里的setComment,但似乎找不到如何获取zip包里的附加注释的方法,在google里搜了一下,在一个英文网站里发现这个方法,测试可用.

public static String extractZipComment (String filename) {
			String retStr = null;
			try {
			File file = new File(filename);
			int fileLen = (int)file.length();
			 
			FileInputStream in = new FileInputStream(file);
			 
			/* The whole ZIP comment (including the magic byte sequence)
			* MUST fit in the buffer
			* otherwise, the comment will not be recognized correctly
			*
			* You can safely increase the buffer size if you like
			*/
			byte[] buffer = new byte[Math.min(fileLen, 8192)];
			int len;
			 
			in.skip(fileLen - buffer.length);
			 
			if ((len = in.read(buffer)) > 0) {
			retStr = getZipCommentFromBuffer (buffer, len);
			}
			 
			in.close();
			} catch (Exception e) {
			e.printStackTrace();
			}
			return retStr;
	}
		 
	private static String getZipCommentFromBuffer (byte[] buffer, int len) {
			byte[] magicDirEnd = {0x50, 0x4b, 0x05, 0x06};
			int buffLen = Math.min(buffer.length, len);
			//Check the buffer from the end
			for (int i = buffLen-magicDirEnd.length-22; i >= 0; i--) {
				boolean isMagicStart = true;
				for (int k=0; k < magicDirEnd.length; k++) {
					if (buffer[i+k] != magicDirEnd[k]) {
					isMagicStart = false;
					break;
					}
				}
				if (isMagicStart) {
					//Magic Start found!
					int commentLen = buffer[i+20] + buffer[i+22]*256;
					int realLen = buffLen - i - 22;
					System.out.println ("ZIP comment found at buffer position " + (i+22) + " with len="+commentLen+", good!");
					if (commentLen != realLen) {
					System.out.println ("WARNING! ZIP comment size mismatch: directory says len is "+
					commentLen+", but file ends after " + realLen + " bytes!");
					}
					String comment = new String (buffer, i+22, Math.min(commentLen, realLen));
					return comment;
				}
			}
			System.out.println ("ERROR! ZIP comment NOT found!");
			return null;
	}

分享到:
评论

相关推荐

    java源码包实例源码JAVA开发源码50个合集.zip

    Java手机游戏大富翁源代码+注释.rar Java手机短信项目源码.rar Java扫雷源码.rar Java生成自定义控件源代码.rar Java调色板面板源代码.rar Java跳棋(基于SWT).rar Java通讯录手机版源码.rar Java鼠标拖拽功能.rar ...

    xmljava.zip

    在"xmljava.zip"这个压缩包中,我们可以预想它包含了与使用Java处理XML相关的代码示例或项目。 XML的基本结构由元素、属性、文本内容、注释和处理指令组成。元素是XML文档的核心,它们定义了数据的结构。属性用于为...

    ATM.zip_atm_atm java_zip

    标题中的"ATM.zip_atm_atm java_zip"暗示了这是一个关于自动取款机(ATM)系统的项目,其中包含了用Java编程语言编写的代码。这个压缩包可能包含两个不同的ATM程序,以及一些附加文档。 描述中的"Deux programes ...

    ModelGoon-UML4Java-master.zip

    注释可以附加在任何元素上,提供对元素功能的解释;操作则代表类的方法,可以包含参数、返回类型和操作体等信息。 最后,UML类图不仅用于设计阶段,还可以在开发过程中持续更新,反映代码的变化。当你修改Java代码...

    java-lib-annotated-validator,使用注解的Java验证程序库.zip

    它利用自定义的运行时注释和Java的反射机制来实现数据验证,这为开发者提供了更加灵活和方便的方式来验证对象属性的正确性。下面将详细阐述这个库的核心概念、工作原理以及如何在实际开发中应用。 1. **核心概念:*...

    java-leetcode题解之第824题山羊拉丁文.zip

    在本压缩包“java-leetcode题解之第824题山羊拉丁文.zip”中,包含的是关于Java编程语言解决LeetCode算法题目的代码实现,特别是针对第824题“山羊拉丁文”(Goat Latin)的解答。LeetCode是一个在线平台,它提供了...

    JavaOOP_第4章上机练习.zip

    Java面向对象编程(Object-Oriented Programming,简称OOP)是Java编程的核心概念,它以类和对象为基本单位,通过封装、继承和多态等特性实现代码的复用和模块化。本章上机练习将深入探讨这些关键概念。 1. **封装*...

    eclipse自动获取源码.zip

    本文将围绕"eclipse自动获取源码.zip"这一主题,详细讲解如何在Eclipse中实现这个功能,并介绍提供的Java_Source_Attacher_1.2.8.jar工具和使用说明.txt文件。 首先,Eclipse自动获取源码的功能主要通过Javadoc和...

    综合所得个税筹划问题研究——基于JAVA程序.zip

    在程序设计过程中,需要遵循良好的编程规范,如合理的变量命名、注释编写、异常处理等,以提高代码的可读性和可维护性。同时,为了保证数据的安全和隐私,还应该考虑到数据加密和用户隐私保护措施。 此外,如果该...

    基于Java的源码-24点游戏逼真图形版代码.zip

    "基于Java的源码-24点游戏逼真图形版代码.zip" 这个标题表明我们正在处理一个使用Java编程语言开发的项目,该项目实现了24点游戏的图形化版本。24点游戏是一种流行的心智游戏,玩家需要利用四张扑克牌上的数字,通过...

    注册与登录_基于xml格式的存储.zip

    CommentUtils可能提供了添加、删除或获取XML文档中注释的功能,增强了代码的可读性和维护性。 在注册过程中,通常需要验证用户输入的信息,例如检查用户名的唯一性,密码的复杂度等。这些验证规则可以通过Java编写...

    Core+Java+课件.doc

    【Core Java 课件】是IT教育领域的一份内部资料,涵盖了从面向过程编程到面向对象编程的思维转变,以及Java编程的相关基础知识,包括字节码、虚拟机、环境变量的设置、Java程序的编译与执行,以及包结构和注释的使用...

    Java帮助文档 JDK全系列 官方中英下载地址.docx

    - Java 6中文版ZIP下载:http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/builds/latest/html_zh_CN.zip 5. 使用JDK进行开发: - 开发者可以利用JDK提供的工具进行程序开发,例如使用`javac`...

    gallery重叠特效源码+注释.zip

    【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主...

    唐忠亮编写的基于Java数据库的个人人脉管理系统源代码.zip

    《基于Java数据库的个人人脉管理系统源代码》是一个实用的软件项目,旨在帮助用户高效地管理和维护个人的人脉关系。此系统充分利用了Java编程语言的强大功能和SQL数据库的强大数据存储能力,为用户提供了一个易于...

    xml解析.zip

    属性是附加在元素上的信息,例如`&lt;book id="123"&gt;`表示书的ID为123。文本内容是元素内部的实际数据,如`&lt;title&gt;Java编程&lt;/title&gt;`。注释则用于提供文档的人类可读性,如`&lt;!-- 这是一本关于编程的书 --&gt;`。 XML解析...

    毕设&课设&项目&实训-ORB-SLAM2 源码注释, 基于泡泡机器人的注释版本.zip

    【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与...

Global site tag (gtag.js) - Google Analytics