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手机游戏大富翁源代码+注释.rar Java手机短信项目源码.rar Java扫雷源码.rar Java生成自定义控件源代码.rar Java调色板面板源代码.rar Java跳棋(基于SWT).rar Java通讯录手机版源码.rar Java鼠标拖拽功能.rar ...
在"xmljava.zip"这个压缩包中,我们可以预想它包含了与使用Java处理XML相关的代码示例或项目。 XML的基本结构由元素、属性、文本内容、注释和处理指令组成。元素是XML文档的核心,它们定义了数据的结构。属性用于为...
标题中的"ATM.zip_atm_atm java_zip"暗示了这是一个关于自动取款机(ATM)系统的项目,其中包含了用Java编程语言编写的代码。这个压缩包可能包含两个不同的ATM程序,以及一些附加文档。 描述中的"Deux programes ...
注释可以附加在任何元素上,提供对元素功能的解释;操作则代表类的方法,可以包含参数、返回类型和操作体等信息。 最后,UML类图不仅用于设计阶段,还可以在开发过程中持续更新,反映代码的变化。当你修改Java代码...
它利用自定义的运行时注释和Java的反射机制来实现数据验证,这为开发者提供了更加灵活和方便的方式来验证对象属性的正确性。下面将详细阐述这个库的核心概念、工作原理以及如何在实际开发中应用。 1. **核心概念:*...
在本压缩包“java-leetcode题解之第824题山羊拉丁文.zip”中,包含的是关于Java编程语言解决LeetCode算法题目的代码实现,特别是针对第824题“山羊拉丁文”(Goat Latin)的解答。LeetCode是一个在线平台,它提供了...
Java面向对象编程(Object-Oriented Programming,简称OOP)是Java编程的核心概念,它以类和对象为基本单位,通过封装、继承和多态等特性实现代码的复用和模块化。本章上机练习将深入探讨这些关键概念。 1. **封装*...
本文将围绕"eclipse自动获取源码.zip"这一主题,详细讲解如何在Eclipse中实现这个功能,并介绍提供的Java_Source_Attacher_1.2.8.jar工具和使用说明.txt文件。 首先,Eclipse自动获取源码的功能主要通过Javadoc和...
在程序设计过程中,需要遵循良好的编程规范,如合理的变量命名、注释编写、异常处理等,以提高代码的可读性和可维护性。同时,为了保证数据的安全和隐私,还应该考虑到数据加密和用户隐私保护措施。 此外,如果该...
"基于Java的源码-24点游戏逼真图形版代码.zip" 这个标题表明我们正在处理一个使用Java编程语言开发的项目,该项目实现了24点游戏的图形化版本。24点游戏是一种流行的心智游戏,玩家需要利用四张扑克牌上的数字,通过...
CommentUtils可能提供了添加、删除或获取XML文档中注释的功能,增强了代码的可读性和维护性。 在注册过程中,通常需要验证用户输入的信息,例如检查用户名的唯一性,密码的复杂度等。这些验证规则可以通过Java编写...
【Core Java 课件】是IT教育领域的一份内部资料,涵盖了从面向过程编程到面向对象编程的思维转变,以及Java编程的相关基础知识,包括字节码、虚拟机、环境变量的设置、Java程序的编译与执行,以及包结构和注释的使用...
- 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`...
【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主...
《基于Java数据库的个人人脉管理系统源代码》是一个实用的软件项目,旨在帮助用户高效地管理和维护个人的人脉关系。此系统充分利用了Java编程语言的强大功能和SQL数据库的强大数据存储能力,为用户提供了一个易于...
属性是附加在元素上的信息,例如`<book id="123">`表示书的ID为123。文本内容是元素内部的实际数据,如`<title>Java编程</title>`。注释则用于提供文档的人类可读性,如`<!-- 这是一本关于编程的书 -->`。 XML解析...
【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与...