【日常记录-Java】JarFile

1. 简介

        JarFile是java.util.jar包下的一个类,其扩展了java.util.zip.ZipFile类。JarFile主要用于读取Jar文件的内容。Jar文件是一种用于存储和分发Java类文件、资源文件和元数据的文件格式,其类似于Zip压缩文件,但具有特定的用途和结构。

2. 详情

 2.1 功能

        JarFile提供了一系列方法用于从Jar文件中读取条目(如类文件、资源文件等),并获取这些条目的相关信息。方法如下:

  • entries()  : 返回一个枚举(Enumeration),包含Jar文件中的所有条目;
  • getEntry(String name)  : 根据条目的名称获取一个JarEntry对象,该对象包含条目的详细信息(如压缩大小、解压大小、时间戳等);
  • getInputStream(JarEntry entry)   : 返回一个输入流(InputStream),用于读取指定条目的内容;
  • getManifest()  :  返回Jar文件的Manifest对象,Manifest是一个包含Jar文件元数据的文件(如版本信息、主类信息等);
  • close()  :   关闭Jar文件,释放与其关联的资源;

2.2 构造方法

  • JarFile(File file): 创建一个新的JarFile对象,从指定的File对象中读取;

  • JarFile(File file, boolean verify) : 创建一个新的JarFile对象,并指定是否验证Jar文件的条目,若verify为true,则验证签名;

  • JarFile(File file, boolean verify, int mode) : 在指定模式下创建一个新的JarFile对象,mode参数用于指定打开文件的模式(如只读模式);

  • JarFile(File file, boolean verify, int mode, Runtime.Version version) : 其允许指定一个运行时版本,以便在处理多版本Jar文件时使用。多版本Jar文件是一种特殊的Jar文件,其包含针对不同Java版本的条目;

2.3 使用场景

  • 读取Jar文件中的资源:如Jar文件中的配置文件、图片等,并将它们加载到应用程序中;
  • 动态加载类:动态地加载Jar文件中的类,无需在编译时将它们包含在类路径中;这对于开发插件系统或动态扩展应用程序非常有用;
  • 验证Jar文件的完整性:若Jar文件已签名,则可以使用JarFile类的验证功能来验证Jar文件的完整性,以确保它未被篡改;

   2.4 注意事项

  • 关闭资源:使用完JarFile对象后,务必调用其close()方法来关闭文件流,以避免资源泄露;
  • 异常处理:在处理Jar文件时,可能会遇到各种异常(如IOException、SecurityException等),需要进行适当的异常处理;
  • 多版本Jar文件:若处理的是多版本Jar文件,则需要了解如何正确使用JarFile类的构造方法和相关方法进行处理;

3. 示例

// step1: 导入必要的类
import java.io.File; 
import java.util.Properties; 
import java.io.InputStream;
import java.io.IOException;  
import java.util.Enumeration;  
import java.util.jar.JarEntry;  
import java.util.jar.JarFile;// step2: 读取
public class JarFileReader {  public static void main(String[] args) {  // step2.1: 假设JAR文件的路径是 "example.jar"  File jarFile = new File("example.jar");  try (JarFile jar = new JarFile(jarFile)) {  // step2.2: 获取JAR文件中的所有条目  Enumeration<JarEntry> entries = jar.entries();  // step2.3: 遍历条目  while (entries.hasMoreElements()) {  JarEntry entry = entries.nextElement();  String entryName = entry.getName();  System.out.println("Entry: " + entryName);  long size = entry.getSize();  long compressedSize = entry.getCompressedSize();  long time = entry.getTime();  System.out.println("  Size: " + size);  System.out.println("  Compressed Size: " + compressedSize);  System.out.println("  Time: " + time);  // step2.3: 如果需要读取条目内容,可以使用以下代码if (entryName.endsWith(".properties")) {  try (InputStream inputStream = jar.getInputStream(entry )) {Properties properties = new Properties();properties.load(inputStream);String property = properties.getProperty("属性名");}}  }  } catch (Exception e) {  e.printStackTrace();  }  }  
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/460845.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle视频基础1.1.4练习

1.1.4 dbb,ddabcPMON,SMON,LGWR,CKPT,DBWna5,b4,c2,d3,e1ad,a,c,b,eOracle instance,Oracle databaseSGA,background processcontrol file,data file,online redo file 以下是一篇关于 Oracle 基础习题 1.1.4 的博客&#xff1a; Oracle 基础习题解析&#xff1a;1.1.4 本篇文…

每日读则推(十四)——Meta Movie Gen: the most advanced media foundation models to-date

premiere n.首映,首次公演 v.首次公演(戏剧、音乐、电影) a.首要的,最早的 Today we’re premiering Meta Movie Gen: the most advanced media foundation models to-date. 迄今,到现在为止 …

uniapp实现【时间戳转换为日期格式(年-月-日 时-分-秒)】

这是接口返回的数据: 转换成日期格式 具体代码: <view class="time">{{formatDate(res.data.time)}

前端代码注释

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言类注释属性注释函数注释函数参数注释解构 & 函数返回结果 注释Vue Props 注释注释建议注释内容要清晰简洁注释类型避免不必要的注释采用一致的风格版本与更…

[ 问题解决篇 ] 解决windows虚拟机安装vmtools报错-winserver2012安装vmtools及安装KB2919355补丁 (附离线工具)

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

安娜的档案(Anna’s Archive) 镜像网站/国内最新可访问入口(持续更新)

安娜的档案&#xff08;Anna’s Archive&#xff09;是一个颇受关注的资源库。它涵盖了广泛的内容&#xff0c;可能包括各类文献、资料等。其特色在于丰富的信息储备和一定的系统性。安娜的档案&#xff08;Anna’s Archive&#xff09;用户可以从中获取多样的知识和数据&#…

【p2p、分布式,区块链笔记 分布式容错算法】: 拜占庭将军问题+实用拜占庭容错算法PBFT

papercodehttps://pmg.csail.mit.edu/papers/osdi99.pdfhttps://github.com/luckydonald/pbft 其他相关实现&#xff1a;This is an implementation of the Pracltical Byzantine Fault Tolerance protocol using PythonAn implementation of the PBFT consensus algorithm us…

系统架构图设计(行业领域架构)

物联网 感知层&#xff1a;主要功能是感知和收集信息。感知层通过各种传感器、RFID标签等设备来识别物体、采集信息&#xff0c;并对这些信息进行初步处理。这一层的作用是实现对物理世界的感知和初步处理&#xff0c;为上层提供数据基础网络层&#xff1a;网络层负责处理和传输…

简缩极化模型+简缩极化求解用优化的方法,也需要保证方程和未知数个数

一个定标器可以得到一个复数矢量&#xff0c;4个实数方程 而模型中我们有&#xff0c;每个定标器有不同的A和φ (两个实数)和相同的R和δc &#xff08;4个复数&#xff09;

paimon实战 -- Changelog Producer到底有什么用?

目的 Chaneglog producer 的主要目的是为了在 Paimon 表上产生流读的 changelog, 所以如果只是批读的表是可以不用设置 Chaneglog producer 的。 一般对于数据库如 MySQL 来说, 当执行的语句涉及数据的修改例如插入、更新、删除时&#xff0c;MySQL 会将这些数据变动记录在 b…

Istio基本概念及部署

一、Istio架构及组件 Istio服务网格在逻辑上分为数据平面和控制平面。 控制平面&#xff1a;使用全新的部署模式&#xff1a;Istiod&#xff0c;这个组件负责处理Sidecar注入&#xff0c;证书颁发&#xff0c;配置管理等功能&#xff0c;替代原有组件&#xff0c;降低复杂度&…

支付宝自动扣款如何关闭服务

支付宝作为我们日常生活中常用的支付工具&#xff0c;不仅方便快捷&#xff0c;还提供了自动扣款服务。然而&#xff0c;有时候我们可能会因为不再需要某项服务&#xff0c;或者其他原因&#xff0c;需要关闭这些自动扣款服务。本文将详细介绍如何在支付宝中关闭自动扣款服务。…

Java爬虫:在1688上“照片快递”上传图片

想象一下&#xff0c;你是一名快递小哥&#xff0c;不过你送的不是包裹&#xff0c;而是图片——而且是用Java编写的爬虫作为你的快递车&#xff0c;将图片快速准确地送到1688的服务器上。今天&#xff0c;我们将一起化身为代码界的“照片快递”&#xff0c;使用Java爬虫技术&a…

Windows安装Git最新保姆级教程【附安装包】

一、Git下载: 链接&#xff1a;https://pan.baidu.com/s/1_uH-_-cdBb6GD58oLcxvAA 提取码&#xff1a;m366 二、安装Git 1.右键桌面【此电脑】-【属性】&#xff0c;查看操作系统是32位还是64位。 2.下载好对应64位操作系统版本的Git&#xff0c;解压并打开。 我电脑系统是64位…

vue3父子组件传值,子组件暴漏方法

1.父传子 defineProps 父组件直接通过属性绑定的方式给子组件绑定数据&#xff0c;子组件通过defineProps接收函数接收 其中v-model是完成事件绑定和事件监听的语法糖。v-model算是v-bind和v-on的简洁写法&#xff0c;等价于 <c-input ref"inputRef" :modelValue…

2024年,Rust开发语言,现在怎么样了?

Rust开发语言有着一些其他语言明显的优势&#xff0c;但也充满着争议&#xff0c;难上手、学习陡峭等。 Rust 是由 Mozilla 主导开发的通用、编译型编程语言&#xff0c;2010年首次公开。 在 Stack Overflow 的年度开发者调查报告中&#xff0c;Rust 连续多年被评为“最受喜爱…

【C++动态规划】有效括号的嵌套深度

本文涉及知识点 C动态规划 LeetCode1111. 有效括号的嵌套深度 有效括号字符串 定义&#xff1a;对于每个左括号&#xff0c;都能找到与之对应的右括号&#xff0c;反之亦然。详情参见题末「有效括号字符串」部分。 嵌套深度 depth 定义&#xff1a;即有效括号字符串嵌套的层…

医院信息化与智能化系统(14)

医院信息化与智能化系统(14) 这里只描述对应过程&#xff0c;和可能遇到的问题及解决办法以及对应的参考链接&#xff0c;并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图&#xff0c;可以试试PlantUML&#xff0c;告诉GPT你的文件结构&#xff0c;让他给你对应…

dedecms手机搜索不跳转手机页面模板的解决方法

1.找到文件plus/search.php&#xff0c;添加如下代码并保存 $mobile (isset($mobile) && is_numeric($mobile)) ? $mobile : 0; if ( $mobile1 ) {define(DEDEMOB, Y); } 2.来到网站后台&#xff0c;默认模板管理&#xff0c;新建模板 将手机端列表页面的.html文件&…

臻于智境 安全护航 亚信安全受邀出席新华三智算新品发布会

近日&#xff0c;紫光股份旗下新华三集团在北京隆重举办了主题为“乘势 进化 臻于智境”的新华三智算新品发布会。作为新华三集团的长期战略合作伙伴&#xff0c;亚信安全受邀参会&#xff0c;亚信安全CEO马红军出席发布仪式&#xff0c;并与来自各界的业界伙伴共同探讨智能化…