jar包的读取

昨天在做项目插件的时候,因为会用到jar包中的一个文件来初始化程序。并且以后还是会访问这个文件,所以就想到干脆吧文件拷贝到指定目录。在拷贝的时候也费了好一会时间,这里涉及到了jar文件的操作,在这里记下来以后有用到的时候方便查找

  1. 如果jar中还存在jar包或者其他压缩包,则使用这种方式读取

    1.  1 public class JarFileAccess {
       2
       3     private static final String fileSeparator = System.getProperty("file.separator");
       4     /**
       5      *
       6      * @param jarFileName jar文件的名称,(注意要添加“.jar”后缀,不要加任何路径分隔符)
       7      * @param fromDir jar的路径
       8      * @param toDir 要将文件拷贝到指定位置的路径
       9      * @throws Exception
      10      */
      11     public void accessJarFile(String jarFileName, String fromDir, String toDir) throws Exception{
      12     JarFile myJarFile = new JarFile(fromDir+fileSeparator+jarFileName);
      13     Enumeration myEnum = myJarFile.entries();
      14     while(myEnum.hasMoreElements()){
      15       JarEntry myJarEntry = (JarEntry)myEnum.nextElement();
      16       System.out.println(myJarEntry.getName());
      17       if(myJarEntry.getName().equals("config.jar")){
      18         InputStream is = myJarFile.getInputStream(myJarEntry);
      19         FileOutputStream fos = new FileOutputStream(toDir+fileSeparator+myJarEntry.getName());
      20         byte[] b = new byte[1024];
      21         int len;
      22         while((len = is.read(b))!= -1){
      23             System.out.println(b.toString());
      24           fos.write(b, 0, len);
      25         }
      26         fos.close();
      27         is.close();
      28         break;
      29       } else{
      30         continue;
      31       }
      32     }
      33     myJarFile.close();
      34   }
      35 }
  2. 如果要读取的文件在jar包中不是以压缩包或jar的形式存在,用下面的方式方便点
    1.  1 public class JarFileAccess{
       2 /**
       3        * @function 读取jar包中指定文件的内容并且以字符串形式返回
       4        * @param jarPath jar文件的路径
       5        * @param name 要读取的文件名称,要添加后缀名
       6        * @return String 返回读取到的信息
       7        * @throws IOException
       8        */
       9       public  String readFileFromJar(String jarPath ,String name) throws IOException {
      10             JarFile jf = new JarFile(jarPath);
      11             Enumeration<JarEntry> jfs = jf.entries();
      12             StringBuffer sb  = new StringBuffer();
      13             while(jfs.hasMoreElements())
      14             {
      15                 JarEntry jfn = jfs.nextElement();
      16                 if(jfn.getName().endsWith(name))
      17                 {
      18                     InputStream is = jf.getInputStream(jfn);
      19                     BufferedInputStream bis = new BufferedInputStream(is);
      20                     byte[] buf = new byte[is.available()];
      21                     while(bis.read(buf)!=-1)
      22                     {
      23                         sb.append(new String(buf).trim());
      24                     }
      25                     bis.close();
      26                     is.close();
      27                     break;
      28                 }
      29             }
      30             return sb.toString();
      31         }
      32       /**
      33        * @function 读取jar包中指定文件的内容并且将读取到的内容拷贝到指定文件中
      34        * @param jarPath jar文件的路径
      35        * @param name 要读取的文件名称,要添加后缀名
      36        * @param toNewFile 将拷贝到的信息复制到目标文件
      37        * @throws IOException
      38        */
      39       public  void readFileFromJar(String jarPath ,String name,File toNewFile) throws IOException {
      40             JarFile jf = new JarFile(jarPath);
      41             Enumeration<JarEntry> jfs = jf.entries();
      42             StringBuffer sb  = new StringBuffer();
      43             while(jfs.hasMoreElements())
      44             {
      45                 JarEntry jfn = jfs.nextElement();
      46                 if(jfn.getName().endsWith(name))
      47                 {
      48                     InputStream is = jf.getInputStream(jfn);
      49                     FileOutputStream fos = new FileOutputStream(toNewFile);
      50                     BufferedInputStream bis = new BufferedInputStream(is);
      51                     byte[] buf = new byte[is.available()];
      52                     while(bis.read(buf)!=-1)
      53                     {
      54                         fos.write(buf);
      55
      56                     }
      57                     fos.close();
      58                     bis.close();
      59                     is.close();
      60                     break;
      61                 }
      62             }
      63
      64         }
      65
      66 }

原文地址:https://www.cnblogs.com/lihuibin/p/9121012.html

时间: 2024-11-10 03:25:31

jar包的读取的相关文章

从jar包中读取资源

package myspider; import java.io.UnsupportedEncodingException; /** * * @author mark */ public class Test { public static void main(String[] args) throws UnsupportedEncodingException{ Test t=new Test(); //文件名前不加"/",则表示从当前类所在的包下查找该资源.如下则表示的是从包mysp

(转)java 从jar包中读取资源文件

(转)java 从jar包中读取资源文件 博客分类: java 源自:http://blog.csdn.net/b_h_l/article/details/7767829 在代码中读取一些资源文件(比如图片,音乐,文本等等),在集成环境(Eclipse)中运行的时候没有问题.但当打包成一个可执行的jar包(将资源文件一并打包)以后,这些资源文件找不到,如下代码:Java代码 [java] view plaincopy //源代码1: package edu.hxraid; import java

[Java基础] 深入jar包:从jar包中读取资源文件

转载: http://hxraid.iteye.com/blog/483115?page=3#comments 我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等).在单独运行的时候这些简单的处理当然不会有问题.但是,如果我们把代码打成一个jar包以后,即使将资源文件一并打包,这些东西也找不出来了.看看下面的代码: //源代码1: package edu.hxraid; import java.io.*; public class Resource { public void getRe

java 从jar包中读取资源文件

在代码中读取一些资源文件(比如图片,音乐,文本等等),在集成环境(Eclipse)中运行的时候没有问题.但当打包成一个可执行的jar包(将资源文件一并打包)以后,这些资源文件找不到,如下代码:Java代码 [java] view plaincopy //源代码1: package edu.hxraid; import java.io.*; public class Resource { public  void getResource() throws IOException{ File fil

Jar包内读取配置文件

1. 获取Jar包的相对路径 关于此话题,网上众说纷纭.经尝试,下面的方法是OK的. 1. xxx.class.getResource("filename") 这里的filename是基于xxx的class文件的相对路径.如果filename写"",返回.class文件的路径. 2. xxx.class.getResource("/filename") 这里的filename是不依赖于xxx的绝对路径的,也就是以jar包所在目录为相对路径.如果参

运行jar包时读取jar里面的文件

在开发过程中,我们经常会遇到读取配置文件的情况,对于配置文件的读取,根据环境等情况又各有不同,一般情况下,如果从非jar包中使用相对/路径,比较简单,就不在累述了,而在很多 情况下,我们需要把我们的class打包成jar文件,进行使用,这时就会发现,我们先前如果没有考虑到这些,可能就行不通了,那么,该如何解决呢?方法如下 : 有如下路径 : Web-info--|-->classes--->jdbc.properties |-->lib 此时加 入我们需要读取jdbc.propertie

【解惑】深入jar包:从jar包中读取资源文件

我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等).在单独运行的时候这些简单的处理当然不会有问题.但是,如果我们把代码打成一个jar包以后,即使将资源文件一并打包,这些东西也找不出来了.看看下面的代码: //源代码1: package edu.hxraid; import java.io.*; public class Resource { public void getResource() throws IOException{ File file=new File("bin/res

将properties文件放在Jar包并读取

有时候需要在一个library内部打包一个properties文件,包含一些配置信息,而不能部署在外部. 在maven工程里面,将properties文件放在src/main/resources目录下.就会自动打包到classes目录下. 然后在jar包的代码中想要读取这个文件,可以用类似下面的代码: [java] view plaincopyprint? public class Client { private final static String NAME = "engine.prope

jar包的读取1

---恢复内容开始--- 昨天在做项目插件的时候,因为会用到jar包中的一个文件来初始化程序.并且以后还是会访问这个文件,所以就想到干脆吧文件拷贝到指定目录.在拷贝的时候也费了好一会时间,这里涉及到了jar文件的操作,在这里记下来以后有用到的时候方便查找 如果jar中还存在jar包或者其他压缩包,则使用这种方式读取 1 public class JarFileAccess { 2 3 private static final String fileSeparator = System.getPr