zoukankan      html  css  js  c++  java
  • jar包的读取1

    ---恢复内容开始---

    昨天在做项目插件的时候,因为会用到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 }

    ---恢复内容结束---

  • 相关阅读:
    python学习笔记6基本对象和流程语句整理
    暑假第二周总结(2018.7.16——7.22)
    暑假第三周总结(2018.7.23——7.29)
    《大道至简》读后感
    暑假第四周总结(2018.7.30——8.5)
    暑假第一周总结(2018.7.97.15)
    .NET中实现页面间的参数传递 QueryString\Application\Session\Cookie(转载)
    px和dip的区别与转换公式
    android开发ListView+Json+异步网络图片加载+滚动翻页的例子(图片能缓存,图片不错乱)
    正则表达式的惰性匹配方法
  • 原文地址:https://www.cnblogs.com/lihuibin/p/9122292.html
Copyright © 2011-2022 走看看