读取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();
}
分享到:
相关推荐
**JAR文件读取工具详解** Java Archive (JAR) 文件是Java平台上的一个重要组成部分,它主要用于打包Java类、资源文件以及元数据。JAR文件的出现使得Java开发者能够将多个类文件组合成一个单一的可执行文件,方便...
在`Library handling`部分,点击`Add Jars...`或`Add External Jars...`,将需要的JAR文件添加进来,比如压缩包中的`myUtil.jar`。这样,JAR文件就会被正确地打包到`lib`目录下。 接下来是处理外部配置文件。通常,...
1. **解压JAR文件**:首先,你需要使用Java的`JarFile`和`InputStream`等类来读取JAR文件,并用`ZipOutputStream`将内容解压到临时目录。 2. **定位并删除目标文件**:遍历解压后的文件系统,找到需要删除的文件,...
"文件上传jar文件"这个标题指出,我们讨论的是一个包含用于实现文件上传功能的Java库的压缩包。这个压缩包内含了`fileupload.jar`, `commons-io.jar`, 和 `commons-collections.jar`这三个关键的Java档案(JAR)文件...
这个工具的工作原理是读取用户定义的规则,然后按照这些规则对原始JAR文件中的类进行操作,最终生成一个新的JAR文件。`jarjar`的使用通常涉及以下几个步骤: 1. **编写规则文件**:`rule.txt`就是这样的规则文件,...
在实际应用中,Java程序员可以使用这些JAR文件来实现如数据导入导出、报表生成、数据分析等多种功能。例如,通过使用POI库,你可以创建一个新的Excel工作簿,添加工作表,插入数据,设置单元格样式,应用公式,甚至...
在build.gradle文件的dependencies部分添加如下依赖: ```groovy implementation 'com.github.seanjohnson044:libaums:0.7.1' ``` 接下来,确保你的Android设备支持USB OTG(On-The-Go),这样可以将U盘连接到手机。...
而“Android端上传文件的jar包”则可能是一个包含了实现此类功能的预编译Java类库,方便开发者快速集成到自己的项目中。 这个jar包可能包含以下关键知识点: 1. **网络请求库**:上传文件通常需要一个网络请求库来...
"官方jar文件"通常指的是由软件开发者或官方团队发布的,经过验证和测试的JAR包,它们通常包含了某个特定版本的库或应用程序的完整代码。 在Java开发中,JAR文件扮演了多种角色: 1. **代码打包与分发**:开发者...
在文件上传和下载的场景中,Commons IO可以帮助我们完成文件的读写、复制、移动、检查等操作。例如,`FileUtils`类提供了便捷的方法来操作文件,如`copyFile()`用于文件复制,`moveFile()`用于文件移动,而`...
jar文件的结构** `jar`文件是一个压缩格式,内部包含了一组按照特定目录结构排列的`.class`文件和其他资源文件。每个`.class`文件代表了一个Java类或接口。`META-INF`目录通常会包含`MANIFEST.MF`文件,它包含了...
为了实现文件上传功能,你需要在项目的类路径中包含这两个jar文件,然后按照以下步骤进行操作: 1. 创建`DiskFileItemFactory`实例。 2. 使用`DiskFileItemFactory`创建`ServletFileUpload`实例。 3. 检查请求是否为...
在Java项目中,这可以通过使用Java的内置类如`java.util.jar.JarFile`和`java.nio.file.Files`来实现对.jar文件的读取操作。 总之,从.txt到.jar的转换是一个实用的技巧,它允许我们把文本数据整合到Java应用中。...
本篇文章将重点讲解如何使用Java读取NetCDF文件以及生成等值线的实现方法,主要涉及两个关键库:netcdf-4.3.22.jar和wContour.jar。 首先,`netcdf-4.3.22.jar`是Unidata开发的Java NetCDF库,它提供了全面的功能来...
本篇文章将详细探讨如何使用SSM来实现文件上传,并关注提供的两个jar包——`commons-io-2.4.jar`和`commons-fileupload-1.2.2.jar`的作用。 1. **文件上传基本流程** 文件上传通常涉及以下几个步骤: - 前端创建...
注意,poi-3.7-20101029.jar包含了HSSF和XSSF的实现,而poi-ooxml-3.7-20101029.jar则提供了对Office Open XML(OOXML)标准的支持,这对于处理xlsx文件是必需的。 综上所述,通过引入opencsv-2.3.jar、poi-3.7-...
JAR文件的扩展名为.jar,其本质是一个采用ZIP压缩格式的文件集合,这有助于减少网络传输时间和磁盘空间占用。 在Java开发中,JDOM和DOM4J是两个常见的XML处理库,它们允许开发者以对象模型的方式解析、创建和操作...
在这个过程中,我们需要使用Java编程语言,结合FTP(File Transfer Protocol)协议来实现在服务器上上传JAR文件。以下是一些相关的知识点: 1. **FTP协议**:FTP是一种用于在网络上进行文件传输的应用层协议。它...
通过这个接口,开发者可以方便地读取、写入或保存上传的文件。 其次,`commons-io-1.4.jar`是Apache Commons IO库的一个较旧版本,但它仍然包含了处理各种I/O操作的基本工具。在文件上传过程中,Commons IO库提供了...
这里提供的jar文件`hdf5-3.3.2.jar`是Java接口库,它封装了对HDF5文件的操作,使得Java程序员可以通过调用Java API来实现读写HDF5文件。而`libjhdf.so.3.2.1`和`jhdf5.dll`分别是Linux和Windows平台的动态链接库,...