如何从JAR和ZIP包中析取Java源文件

Java项目中必备的JAR包 Java归档(JAR)文件是一种打包机制,用于将Java类文件、图像、声音和其他资源文件组合成单个压缩文件。JAR文件格式不仅优化了分发和部署应用程序,还支持应用程序组件的版本控制和模块化。简而言之,JAR文件是Java生态系统中不可或缺的一部分,它极大地促进了代码的重用性和跨平台部署。JAR文件结构本质上是ZIP格式的压缩包,但具备一些特定的特性,如包含一个清单文件(MANIFEST.MF),可以指定该JAR文件中的主类以及其他元数据信息。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 发信人:consultant(zz),信区:Java 标题:[转载]如何从JAR和ZIP包中析取Java源文件 发信站:网易虚拟社区(FriFeb1809:18:272000),转信 如何从JAR和ZIP包中析取Java源文件 录入/江湖小子 1999.08.07 摘要: 将Java源文件打包成JAR文件,可以减少下载时、增强安全性和易管理性。本文将讨论如何从JAR文件中提取Java源文件。 绝大多数Java程序员非常善于利用JAR文件的优势将各种包含Java解决方案的资源进行打包。面对JAR文件,人们询问的一个普遍问题是:“我何从一个JAR文件中 提取出一个图象文件?”。本文将回答这个问题,并且提供一个Java类,它可以容易地从一个JAR文件中析取出任意一个文件。 加载一个GIF文件 假设我们有一个包含一些.GIF图象文件的JAR文件,这些图象文件将在应用程序中被使用。以下是我们使用JarResources类从JAR文件中析取一个图象文件的代码: JarResourcesjar=newJarResources("Images.jar"); Imagelogo= Toolkit.getDefaultToolkit().createImage(jar.getResource("logo.gif"); 上面代码的含义是:我们建立一个JavaResources对象,并将它初始化为一个包含我们感兴趣资源的JAR文件--Images.jar。然后我们使用JavaResources类的getResource()方法从logo.gif取出原始数据,然后调用AWT工具箱的createImage()方法从原始数据建立一个Image对象实例。 有关命名的注释 JarResource是一个相当容易理解的例子,它解释了如何使用Java1.1提供的各种功能处理JAR和ZIP压缩文档文件。 关于命名的的简单解释。Java对压缩文档的支持实际上起源于使用一般的ZIP压缩文档格式。因此,Java中实现压缩档案操作的类都被放入java.util.zip包中;这些 类一般以“Zip.”开始。但是Java升级到了1.1版以后,压缩文档的命名变得以Java为中心了。从此,我们所说的JAR压缩文档基本上还是zip文件。 代码具体的工作流程 JavaResources类中的一些重要字段用来跟踪和存储指定JAR文件的内容。 publicfinalclassJarResources{ publicbooleandebugOn=false; privateHashtablehtSizes=newHashtable(); privateHashtablehtJarContents=newHashtable(); privateStringjarFileName; 在类进行实例化时设置JAR的文件名,然后调用init()方法完成所有的初始化工作。 publicJarResources(StringjarFileName){ this.jarFileName=jarFileName; init(); } 现在,init()方法把指定JAR文件的全部内容装入到一个杂凑表(hashtable)中(杂凑表名可以从资源名进行访问) init()是一个功能相当强大的方法,让我们来逐步理解它的功能。ZipFile类使我们基本上能访问JAR/Zip压缩文档的头部信息。这和一个文件系统的目录信息相似。在这里我们列出Zip文件的所有条目(entry),并且按照文档中的每个资源的尺寸创建htSizes杂凑表(hashtable)。 privatevoidinit(){ try{ ZipFilezf=newZipFile(jarFileName); Enumeratione=zf.entries(); while(e.hasMoreElements()){ ZipEntryze=(ZipEntry)e.nextElement(); if(debugOn){ System.out.println(dumpZipEntry(ze)); } htSizes.put(ze.getName(),newInteger((int)ze.getSize())); } zf.close(); 下一步,我们使用ZipInputStream类访问压缩文档。ZipInputStream类完成了所有的工作以使我们能读出压缩文档中任意一个资源。我们从包含每个资源的压缩文档中读出准确数目的字节,并将它们存储在一个可由资源名访问的htJarContents杂凑表中。 FileInputStreamfis=newFileInputStream(jarFileName); BufferedInputStreambis=newBufferedInputStream(fis); ZipInputStreamzis=newZipInputStream(bis); ZipEntryze=null; while((ze=zis.getNextEntry())!=null){ if(ze.isDirectory()){ continue; } if(debugOn){ System.out.println( "ze.getName()=" ze.getName() "," "getSize()=" ze.getSize() ); } intsize=(int)ze.getSize(); //-1meansunknownsize. if(size==-1){ size=((Integer)htSizes.get(ze.getName())).intValue(); } byte[]b=newbyte[(int)size]; intrb=0; intchunk=0; while(((int)size-rb)>0){ chunk=zis.read(b,rb,(int)size-rb); if(chunk==-1){ break; } rb =chunk; } //addtointernalresourcehashtable htJarContents.put(ze.getName(),b); if(debugOn){ System.out.println( ze.getName() "rb=" rb ",size=" size ",csize=" ze.getCompressedSize() ); } } }catch(NullPointerExceptione){ System.out.println("done."); }catch(FileNotFoundExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); } } 注意,用来确定每个资源的名字是压缩文档中资源的实际路径名,而不是包(package)中类的名字。也就是说,java.util.zip包中的ZipEntry类的名字应为“java/util /zip.ZipEntry”,而不是"java.util.zip.ZipEntry"。 这段代码最后一个重要部分是一个简单测试程序。这个测试程序能提取一个压缩文档名和资源名。它寻找压缩文档中的资源并报告运行成功与否。 publicstaticvoidmain(String[]args)throwsIOException{ if(args.length!=2){ System.err.println( "usage:javaJarResources" ); System.exit(1); } JarResourcesjr=newJarResources(args[0]); byte[]buff=jr.getResource(args[1]); if(buff==null){ System.out.println("Couldnotfind" args[1] "."); }else{ System.out.println("Found" args[1] "(length=" buff.length ")."); } } }//EndofJarResourcesclass. 现在你知道怎么做了。这个易于使用的类隐藏了所有使用压缩文档中的资源的复杂实现细节。 结论 如果你急于想知道怎样从一个JAR压缩文档中解出一个图象,那么现在你已拥有了一种方法。你不仅能处理和JAR文件相关的图象,而且你还能使用这篇文章提供了新类,在JAR中的任何资源上表演你的解压魔术。 -- 有求皆苦,无欲则刚 ※修改:.consultant于Feb1809:20:18修改本文.[FROM:210.78.138.191] ※来源:.网易虚拟社区http://club.netease.com.[FROM:210.78.138.191]
commons-codec包名的修改,处理编译通过,运行崩溃的问题 commons-codec包名的修改.Android内置了一个Codec库,当使用外部引入的新版本的codec.jar,执行其中方法的时候,会优先加载系统自带的codec库中相应的方法,编译通过运行报错的情况.包名apache改成myapache,里面打包了已经修改包名的commons-codec-1.10.jar 和 commons-codec-1.11.jar两个版本的jar. 立即下载

相关推荐

VASPKIT绘制平面平均电荷差分密度

平面平均密度差(planar-averaged electron density difference)是密度差的衍生。密度差是个三维空间函数,经常通过绘制平面图、等值面图方式图形化考察。虽然这两种图很直观,但平面图会受到截面选取的影响,而等值面图会受到等值面数值(isovalue)选取的影响,因此都有一定任意性,也不容易定量讨论。对于电子转移有比较明确方向的情况,可以绘制平面平均密度差曲线,由此可以清楚地考察垂直于选取的方向上每个截面上的密度差积分值,在定量讨论、对比上比较便利。

weixin_43948934的博客 1万+

jar包冲突常用的解决方法

jar包冲突常见的异常为找不到类(java.lang.ClassNotFoundException)、找不到具体方法(java.lang.NoSuchMethodError)、字段错误( java.lang.NoSuchFieldError)或者类错误(java.lang.LinkageError);常见的解决方法如下: 1、首先做法是打出工程文件的依赖树,将根据jar包依赖情况判定是不是同一个j

B-Tree 3084

解读Autoware.Universe规划模块:Behavior Path Planner

Behavior Path Planner是一个基于行为生成不同形态路径的路径规划器,负责生成 基于交通状况的路径(path), 车辆可以移动的可行驶区域(drivable area)(在路径消息中定义), 将被发送到车辆接口的转向信号(turn signal) 命令。

策 5491

怎么java选中zip下所有jar包_如何从JAR和ZIP包中析取Java源文件

发信人:consultant(zz),信区:Java标题:[转载]如何从JAR和ZIP包中析取Java源文件发信站:网易虚拟社区(FriFeb1809:18:272000),转信如何从JAR和ZIP包中析取Java源文件录入/江湖小子1999.08.07摘要:将Java源文件打包成JAR文件,可以减少下载时、增强安全性和易管理性。本文将讨论如何从JAR文件中提取Java源文件。绝大多数Java程序...

weixin_39759890的博客 268

Python 静态导入与动态导入

python中模块的静态导入 与 动态导入(运行时指定模块),以及具体对应示例。

慢也好,步子小也好,往前走就好~ 717

使用libx265对YUV进行h265编码

使用libx265对YUV进行h265编码

Embedded engineer 3079

jar包完全解读

本文抄自:jar包的一些事儿 前言: 作为java程序员,日常工作就是打jar包,可是对jar包的了解有多少呢? 一、什么是jar包 jar包就是 Java Archive File,顾名思义,它的应用是与 Java 息息相关的,是 Java 的一种文档格式,是一种与平台无关的文件格式,可将多个文件合成一个文件。jar 包与 zip 包非常相似——准确地说,它就是 zip 包,所以叫它文件...

七和 5万+

微前端实战:MicroApp内存泄漏优化策略与性能调优

本文分享了在大型后台管理系统微前端化过程中,使用MicroApp框架时遇到的内存泄漏实战问题与优化策略。通过深入分析沙箱机制,提出动态加载、精准卸载、沙箱配置优化及第三方库补丁等核心方案,并结合Vue/React子应用专项检查清单,有效解决了内存占用飙升问题,为微前端架构的性能调优提供了系统性解决方案。

weixin_29014939的博客 277

jar包和war包的介绍和区别

1.jar包的介绍 JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。JavaSE程序可以打包成Jar包(J其实可以理解为Java了)。 JAR 文件格式以流行的 ZIP 文件格式为基础。与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。...

爱生活,爱学习 2万+

【高级-RAG-优化方法】

本文介绍了两种优化RAG(检索增强生成)系统的高级方法。第一部分介绍KnowFlow项目,它采用父子分块技术,将文档分为父分块(800-1500字符)和子分块(200-400字符),通过精确匹配子分块再返回父分块内容来保证搜索精确性和上下文完整性。第二部分探讨Milvus的多种增强技术,包括查询增强(如假设问题生成、回溯提示)、索引增强(自动合并块、分层索引)、检索器增强(句子窗口检索、元数据过滤)、生成器增强(提示压缩、块排序)以及管道增强(自我反省、代理查询路由)。这些方法共同提升了RAG系统的检索效率

weixin_48585108的博客 960

数通基础(基本网络通信原理、IP地址如何配置、DHCP、DNS域名系统、路由技术基础、静态路由 、TCP和UDP、vlan虚拟局域网、trunk、三层交换)

我们知道了1、电脑开机,通过dhcp获取ip地址2、电脑输入域名,www.baidu.com电脑把www.baidu.com发到自己的dns服务器3、dns服务器把域名解析成对应的ip地址4、电脑向百度服务器发送一个请求。

qq_53235556的博客 6481

Java之jar包和war包的介绍和区别

前言 做Java开发,jar包和war包接触的挺多的,有必要对它们做一个深入的了解,特总结整理一下。 1. jar包 JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。JavaSE程序可以打包成Jar包(J其实可以理解为Java了)。 JAR 文件格式以流行的 ZIP 文件格式为基础。与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。在 J

专注自动化、性能测试、测试架构学习交流 7573

AutoSAR MemMap模块概述及配置参数详解

这个模块是干啥的?它是用来配置Memory Mapping and Compiler Abstraction module。

4508

java中jar包内的类访问jar包内部的资源文件的路径问题

在本地项目中,若我们要访问项目中的资源文件,则一般使用相对路径或者用System.getProperities("user.dir")得到项目根目录,然后再访问资源文件,但是在将该工程和资源文件打包为jar包,运行该jar文件时,会显示找不到资源文件的错误。 在如下项目结构树中,项目根目录为nlpir,如果我们要在src下的某个package的某个java文件中访问blackWhite文件夹中的

mm_bit的博客 7万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

JAR包的讲解

JAR(Java Archive)包是Java平台中用于打包类文件、资源文件和元数据的压缩文件格式,基于ZIP格式但专为Java设计。JAR包的主要特点包括方便分发、可执行性、依赖管理和跨平台性。它可以将多个文件打包成一个文件,便于传输和共享,并且可以通过指定主类直接运行。创建JAR包的过程包括编译Java源代码、打包类文件和资源文件,以及生成清单文件。使用javac命令编译Java文件,jar命令打包文件,并可以通过清单文件指定主类。运行JAR包时,可以使用java -jar命令直接运行包含主类的JAR包

不辉放弃的博客 2815

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

jar命令打包java应用和java打jar包的几种方式详解

4事先准备好上述的MENIFEST.MF文件,并存放在META-INF文件夹下,此时打jar包的命令如下该命令表示用第一个文件当做MENIFEST.MF文件,hello.jar作为名称,将Hello.class和Tom.class打成jar包。其中多了一个参数m,表示要定义MENIFEST文件。

猪之仆的博客 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

war包 和 jar包

一个Web应用程序的目录和文件可能会非常多,将这个web应用程序部署到另一台机器上,会不太方便,因此,可以将这个web应用程序打包成Web归档文件(war),这个过程和把java 类文件打包成jar相似。将jar包引入到自己的项目中,就可以引入到自己的项目中,可以直接使用这些jar包中的类和属性(从前这些jar包会被扔到lib/目录下)简单的讲,zip只是将代码文件压缩,打jar包不仅是文件压缩,还将代码中的类进行打包,这样就可以让别人直接进行引入调用了。jar文件格式以流行的zip文件格式为基础。

weixin_44945843的博客 2122

docx4j-jar.zip 资源文件介绍

docx4j-jar.zip 资源文件介绍 【下载地址】docx4j-jar.zip资源文件介绍 docx4j-jar.zip 是一个专为Java开发者设计的资源文件包,包含了多个与docx4j库相关的jar文件,用于高效处理和操作Microsoft Word文档(.docx格式)。该压缩包内集成了核心库、JAXB数据绑...

gitblog_06739的博客 1365

Jar包和War包的区别

JAR包和WAR包在Java开发中各有用途。JAR包适用于普通Java应用程序或库的打包,具有独立运行的特点,适合快速迭代和部署。而WAR包专门用于Web应用程序的打包,需要部署到Web服务器中,能够充分利用服务器的管理和优化能力。开发者应根据项目的具体需求选择合适的打包方式。版权声明:本博客内容为原创,转载请保留原文链接及作者信息。参考文章JAR 和 WAR 文件的区别 - 代码千问微服务架构下Java应用打包选择:Jar与War的优劣对比解析 - 云原生实践。

ning的博客 2080

java小白必读,一文带你理解什么是war包和jar包

JAR包和WAR包是Java应用的两种打包格式。JAR包用于普通Java程序或库,可独立运行或作为依赖库;WAR包专为Web应用设计,包含WEB-INF目录和Web资源,需部署到Servlet容器。随着SpringBoot的流行,内嵌服务器的可执行JAR成为Web应用新选择,但传统WAR包在企业级部署中仍有用武之地。选择打包方式取决于应用类型和部署环境需求。

liwenxiang629的博客 1650

java的jar包_Java关于jar包的知识详解

在学习jar包之前,要先弄懂Java包,以及关于Java包的相关概念。一、包为了更好地组织类,Java提供了包机制。包是类的容器,用于分隔类名空间。如果没有指定包名,所有的示例都属于一个默认的无名包。格式为:package pkg1[.pkg2[.pkg3…]];代码实例:package cn.com.zhouzhou;//包名一定要由小写字母组成public class Lession1 {pu...

weixin_34984235的博客 3587

jar包相关

jar包的导出与导入,与war包的区别。

weixin_46356448的博客 2257

java解压zip包_jar包的一些事儿

在咱们日常的搬砖过程中,只要你涉及到Java的项目,就不可避免地接触到jar包。而实际开发中,maven等项目管理工具为我们自动地管理jar包以及相关的依赖,让jar包的调用看起来如黑盒一般"密不透风"。今天,让我们借这个难得的机会来解开这一黑盒,去探索其中的奥秘,正因为这样,咱们接下来主要还是以原生的指令为主,只有通过对原生的理解才能在后续实际工作中贪快图方便使用idea等IDE直接打包jar时...

weixin_39952190的博客 979

Java基础——JAR包和WAR是什么?有何区别?

在Java应用开发中,JAR(Java ARchive)包和WAR(Web Application Archive)包是两种常见的打包格式,分别用于不同类型的Java应用程序。下面是对JAR包和WAR包的详细介绍,包括它们的定义、结构、使用场景、创建和部署方式等方面的内容。JAR文件的主要作用是将Java应用程序的多个文件整合成一个文件,便于分发和执行。WAR包将Java类文件、HTML文件、JSP文件、CSS文件、JavaScript文件以及Web应用的配置文件(如。目录,用于存储元数据。

qq_42631788的博客 3097
上一篇: jsp的安装,何志强篇
下一篇: 一个拼图游戏
java169
博客等级 码龄18年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值