读取Jar文件的内容可以通过JarInputStream来实现(继承于ZipInputStream)。
Java中通过ZipEntry来表示Jar中的一项。
JarInputStream提供getNextEntry()方法以遍历Jar文件中的每一项。
JarInputStream提供getManifest()方法以获取Manifest中定义的信息。
JarInputStream提供read()方法以读取每一项的内容。
具体实现如下:
private byte[] loadClassData(String name)
throws ClassNotFoundException {
JarInputStream jarInputStream = null;
try {
jarInputStream = new JarInputStream(new FileInputStream(jarFilename));
} catch (FileNotFoundException e) {
throw new ClassNotFoundException(jarFilename + " doesn't exist", e);
} catch (IOException e) {
throw new ClassNotFoundException("Reading " + jarFilename + " error", e);
}
byte[] classData = null;
String location = name.replace('.', '/') + ".class";
while(true) {
ZipEntry entry = null;
try {
entry = jarInputStream.getNextEntry();
if(entry == null) break;
String entryName = entry.getName();
if(entryName.toLowerCase().endsWith(".class") &&
entryName.equals(location)) {
classData = readClassData(jarInputStream);
}
} catch(IOException e) {
System.err.println(e.getMessage());
}
}
if(classData == null) {
throw new ClassNotFoundException(name + " cannot be found");
}
return classData;
}
private byte[] readClassData(JarInputStream jarInputStream)
throws IOException {
ByteArrayOutputStream classData = new ByteArrayOutputStream();
int readSize = 0;
while(jarInputStream.available() != 0) {
// 注:有些时候,即使jarInputStream有超过BUFFER_SIZE的数据
// 也有可能读到的数据少于BUFFER_SIZE
readSize = jarInputStream.read(buffer, 0, BUFFER_SIZE);
// jarInputStream.available()好像不起作用,因而需要加入一下代码
if(readSize < 0) break;
classData.write(buffer, 0, readSize);
}
return classData.toByteArray();
}
分享到:
相关推荐
将下载后的文件解包,得到jxl.jar,放入classpath,安装就完成了。 (很大总是不能很好的加载,我想补充一下:把你下载好的JXL.JAR包放入D:\JAVA\jre\lib\ext中(我的是JDK1.6)就OK了。我相信在配置TOMCAT时也...
rt.jar源码 Mini-JVM 使用Go实现的Java虚拟机(不完整),解释执行,仅学习JVM使用; Mini-JVM首先会从classpath中加载主类的class文件,然后找到main方法的字节码解释执行;执行过程中如果遇到新的类符号引用,则会...
2. jar文件没有更新,如果需要打好包的jar文件请等我把功能都实现后的那个版本 - - 尚未实现的功能: 1. 剪切/复制/粘贴功能 2. 拖拽功能 3. 详尽的注释 4. 异常处理 5. 国际化 ################14/12/2007更新#...
Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,...
jar文件没有更新,如果需要打好包的jar文件请等我把功能都实现后的那个版本 - - <br> 尚未实现的功能: 1. 剪切/复制/粘贴功能 2. 拖拽功能 3. 详尽的注释 4. 异常处理 5. 国际化 <br> ...
相当于把.java编译成了.class,再读取dbf文件,执行实体对dbf文件内容进行相应的操作,相当于 类加载执行,实现sql语句的解析执行的过程。 2.实现了create,insert,update,delete,select,多表查询,排序等简单...
Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,...
在项目代码的中,在编译之前将java源文件通过流的读取和扫描实现替换,也可以通过pom.xml参数实现 自定义的内容的替换。下面是替换的核心代码: private void replace(String path, String origin, String targin) ...
Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术...
Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术...
读取端包括以下部分: GerberParser:PEG解析器解析输入并调用GerberParseEventHandler GerberReadAdapter:根据标准将解析事件转换为更高级别的事件。 调用GerberReadEventHandler ...
Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术...
程序仅实现了对文本文件的内容读取和解析,isf文件由于其格式高通未公布,其文件结构属于黑盒状态,暂时无法直接解析。 当前对isf文件的导入方案为:通过QCAT先转化为文本再导入。 当用户选取某个isf文件后,程序...
Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义...
Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义...
fireworkflow配,操作手册,Fire ...引擎读取流程定义文件并解释执行,提供一组对象和相关的API供外部系统调用,如流程实例(ProcessInstance),任务实例(TaskInstance),工单(WorkItem)事件等,org-fireflow-engine.jar
Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,...
使用JDK8启动,命令如下: java -javaagent:Exp-...新增致远帆软报表文件读取-bypass 新增泛微eoffice uploadify上传 新增php-framework和java-framework 新增nacos任意用户添加 新增金蝶云星空反序列化 优化部分代码
该代码将:- 读取所有数据包在UDP或TCP数据包中找到任何SIP数据包解析所有SIP标头,使原始MSISDN匿名存储更新的SIP数据包非SIP数据包通过未更改的方式复制手术使用要处理的pcap文件的名称运行可执行jar文件。...