知识大全 从JAR文件中读取文件

Posted 文件

篇首语:总有一些人路过你的人生,微不足道又无比重要。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 从JAR文件中读取文件相关的知识,希望对你有一定的参考价值。

从JAR文件中读取文件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

      作者 John Zukowski   翻译 Roger Sun   原文来源   #   译文地址    bin/forum/topic cgi?forum= &topic=     ==============================================    JAR文件是打包基于JAVA技术的解决方案的标准方法 它允许开发者将所有相关内容( class 图片 声音 及所有支持的文件)打包到一个文件中 JAR格式支持压缩 认证 版本号及其他很多特性     从JAR文件中读取文件是很麻烦的事情 但是也不一定全是这样 本文将告诉你如何从JAR文件中读取文件 首先 得到JAR文件中的文件目录 然后在进行具体的某一个文件的操作     如果你对于常用的ZIP格式比较熟悉的话 JAR文件也就差不多 JAR文件提供一种将多个文件打包到一个文件中的方法 其中每一个文件可能独立地被压缩 JAR文件所增加的内容是manifest 它允许开发者可以提供附加的关于内容的信息 例如 manifest表明JAR文件中的哪个文件是用来运行一个程序的 或者库的版本号等     J SEDK提供了一个jar工具 你可以用它从控制台读写JAR文件 然而 如果你需要在程序中代码读写JAR文件 可能需要一点时间(本文只包含如何在程序中读写JAR文件) 好消息是你可以做到这一点 而且你不用担心解压的事 因为类库将帮助你完成这些 你所需要的类文件位于java util jar包中 这里主要的类是JarFile 它是 jar文件自身的一个引用 较大文件中的每一个单独的文件是通过一个JarEntry引用的     首先 通过把将JAR文件位置传给构造函数 创建一个JarFile的实例 位置可能是String或File的形式 如下     JarFile jarFile = new JarFile( thefile jar );     或者       File file = new File( thefile jar );     JarFile jarFile = new JarFile(file);       你可能注意到当文件不在class path中时 JarFile类对于从JAR中读取文件文件是很有用的   当你想指定目标JAR文件时 JarFile类对于从JAR中读取文件同样也很有用 当然 如果JAR文件在class path中 从其中读取文件的方法比较简单 你可以用下面的方法      URL url = ClassLoader getSystemResource(name);   或者      InputStream stream =      ClassLoader getSystemResourceAsStream(name);     这种技术允许你从在class path中的JAR文件里读取文件 你不必指定JAR文件名       还有其他的构造函数 如认证支持 标志要删除的文件等 这些构造函数在这儿不做说明     当你有了该JAR文件的一个引用之后 你就可以读取其文件内容中的目录信息了 JarFile的entries方法返回所有entries的枚举集合(Enumeration) 通过每一个entry 你可以从它的manifest文件得到它的属性 任何认证信息 以及其他任何该entry的信息 如它的名字或者大小等      Enumeration enum = jarFile entries();    while (enum hasMoreElements())     process(enum nextElement());        正如前面提到的 每一个entry是一个JarEntry 该类有getName getSize getCompressedSize等方法     下面 让我们举例说明在程序中如何使用这些特性 下面的程序显示你指定的JAR文件中内容的名称 大小 压缩大小等(这有点类似于在使用jar命令时 指定 t 和 v 选项)      import java io *;    import java util *;    import java util jar *;      public class JarDir     public static void main (String args[])       throws IOException      if (args length != )       System out println(         Please provide a JAR filename );       System exit( );            JarFile jarFile = new JarFile(args[ ]);      Enumeration enum = jarFile entries();      while (enum hasMoreElements())       process(enum nextElement());                  private static void process(Object obj)      JarEntry entry = (JarEntry)obj;      String name = entry getName();      long size = entry getSize();      long pressedSize = entry getCompressedSize();      System out println(        name + \\t + size + \\t + pressedSize);              如果你用J SE 中的jce jar作为参数运行上面的JarDir程序 你将看到类似于下面的输出( 部分为省略掉的输出)     META INF/MANIFEST MF        META INF/ JCEJARS SF        META INF/ JCEJARS DSA       META INF/          javax/        javax/crypto/        javax/crypto/interfaces/           javax/crypto/interfaces/DHKey class        javax/crypto/interfaces/DHPublicKey class         javax/crypto/interfaces/DHPrivateKey class         javax/crypto/interfaces/PBEKey class        javax/crypto/SecretKey class             注意输出最开始的META INF行 这是manifest和安全认证信息 字节的entries不是文件 但是有点相当于目录     为了从JAR文件中真正读取一个指定的文件 你必须到其entry的InputStream 这和JarEntry不一样 这是因为JarEntry只是包含该entry的有关信息 但是并不实际包含该entry的内容 这和File和FileInputStream的区别有点儿相似 访问文件没有打开文件 它只是从目录中读取了该文件的信息 下面是如何得到entry的InputStream      InputStream input = jarFile getInputStream(entry);     当你有了输入流 你就可以像读取其他流一样读取它 在文本流中(text stream) 记得使用读取器(Reader)从流中取得字符 对于面向字节的流 如图片文件 直接读取就行了     下面的程序演示如何从JAR文件中读取文件 指定JAR文件的名称 要读取的文件的名称(打包JAR文件中的某一个文件)作为参数来调用该程序 要读取的文件应该有一个文本类型的      import java io *;    import java util jar *;      public class JarRead     public static void main (String args[])       throws IOException      if (args length != )       System out println(         Please provide a JAR filename and file to read );       System exit( );            JarFile jarFile = new JarFile(args[ ]);      JarEntry entry = jarFile getJarEntry(args[ ]);      InputStream input = jarFile getInputStream(entry);      process(input);      jarFile close();            private static void process(InputStream input)       throws IOException      InputStreamReader isr =      new InputStreamReader(input);      BufferedReader reader = new BufferedReader(isr);      String line;      while ((line = reader readLine()) != null)       System out println(line);            reader close();              假设在myfiles jar文件中有一个spider txt文件 spider文件的内容如下      The itsy bitsy spider    Ran up the water spout    Down came the rain and    Washed the spider out     你可以通过下面的命令来显示该文本文件的内容      java JarRead myfiles jar spider txt      有关JAR文件的更多内容 请参考JAR文件规范 cha138/Article/program/Java/hx/201311/26791

相关参考

知识大全 从JAR和zip档案文件中提取Java资源

从JAR和zip档案文件中提取Java资源  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  加载G

知识大全 java如何创建jar文件

  并不是所有类型的Java应用程序都能打包到单独的一个JAR文件中去必须符合一定的条件一个Java应用程序的所有文件才能打包到一个文件中去另外JAR文件有两种一种是有清单(manifest)文件的一

知识大全 JAVA如何实现从最后一行读取文件

JAVA如何实现从最后一行读取文件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  JAVA如何实

知识大全 访问JAR和JAD文件中的属性

访问JAR和JAD文件中的属性  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  MIDIet能够访

知识大全 如何在Applet中引用jar中的资源文件

技巧:如何在Applet中引用jar中的资源文件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 asp.net使用代码从文件夹里读取图片

cha138/Article/program/net/201311/14235

知识大全 在C#中如何读取配置文件[1]

在C#中如何读取配置文件[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  配置文件概述  应

知识大全 制作可以执行的 JAR 文件包及 jar 命令详解

制作可以执行的JAR文件包及jar命令详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  作者:

知识大全 Jar文件包间接及Jar命令开发实例详解

Jar文件包间接及Jar命令开发实例详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  常常看到

知识大全 spring中读取xml配置文件、获取bean

  读取xml文件  /**  *利用XmlBeanFactory(Resourceresource)  *这里Resource必须是xml格式  *Resource包括AbstractResourc