注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

隐龙 为了一生的信念

今日默默沉于水,他日飞腾在九天...

 
 
 

日志

 
 

【转载】Eclipse插件开发笔记(三)--使用资源文件2  

2014-04-10 13:57:33|  分类: Eclipse PDE |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

      Path.java类的做用是能得到插件JAR文件的绝对物理路径。

      得到该绝对物理路径后,需要从该JAR文件中获得相应的资源文件。因为JAR文件是归档文件,因此需要对该归档文件进行解析,因此又引入了下面的辅助工具类JarResources.java。

2。JarResources.java

   package com.crm.framework.util;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;

public final class JarResources {
 
 public boolean debugon = false;
 private Hashtable htsizes = new Hashtable();
 private Hashtable htjarcontents = new Hashtable();
 private String jarfilename;
 
 public JarResources(String jarfilename) {
  this.jarfilename = jarfilename;
  init();
 }
 
 private void init() {
  try {
   // extracts just sizes only.
   ZipFile zf = new ZipFile(jarfilename);
   Enumeration e = zf.entries();
   while (e.hasMoreElements()) {
    ZipEntry ze = (ZipEntry)e.nextElement();
    if (debugon) {
                  System.out.println(dumpZipEntry(ze));
    }
    htsizes.put(ze.getName(),new Integer((int)ze.getSize()));
           }
           zf.close();
           // extract resources and put them into the hashtable.
           FileInputStream fis = new FileInputStream(jarfilename);
           BufferedInputStream bis = new BufferedInputStream(fis);
           ZipInputStream zis = new ZipInputStream(bis);
           ZipEntry ze = null;
           while ((ze = zis.getNextEntry()) != null) {
            if (ze.isDirectory()) {
             continue;////啊哟!没有处理子目录中的资源啊
            }
            if (debugon) {
             System.out.println(
               "ze.getName()="+ze.getName()+","+"getSize()="+ze.getSize()
             );
            }
            int size = (int)ze.getSize();
            // -1 means unknown size.
            if (size == -1) {
             size = ((Integer)htsizes.get(ze.getName())).intValue();
            }
            byte[] b = new byte[(int)size];
            int rb = 0;
            int chunk = 0;
            while (((int)size - rb) > 0) {
             chunk = zis.read(b,rb,(int)size - rb);
             if(chunk == -1) {
              break;
             }
             rb += chunk;
            }
            // add to internal resource hashtable
            htjarcontents.put(ze.getName(),b);
            if (debugon) {
             System.out.println(
               ze.getName()+" rb="+rb+
               ",size="+size+
               ",csize="+ze.getCompressedSize()
             );
            }
           }
  } catch (NullPointerException e) {
   System.out.println("done.");
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
 
 /**
  * Dumps a zip entry into a string.
  * @param ze a ZipEntry
  */
 private String dumpZipEntry(ZipEntry ze) {
  StringBuffer sb = new StringBuffer();
  if (ze.isDirectory()) {
   sb.append("d ");
  } else {
   sb.append("f ");
  }
  if (ze.getMethod()==ZipEntry.STORED) {
   sb.append("stored   ");
  } else {
   sb.append("defalted ");
  }
  sb.append(ze.getName());
  sb.append("\t");
  sb.append(""+ze.getSize());
  if (ze.getMethod()==ZipEntry.DEFLATED) {
   sb.append("/"+ze.getCompressedSize());
  }
  return (sb.toString());
 }
   
 /**
  * Extracts a jar resource as a blob.
  * @param name a resource name.
  */
 public byte[] getResource(String name) {
  return (byte[])htjarcontents.get(name);
 }
 
 /**
  * @param String jarFileName 绝对路径的JAR文件
  * @param String resourceName 资源文件的路径  形如  bin/template/java/action.template
  * 即前面不要/
  * @throws UnsupportedEncodingException
  * */
 public static String getResourceContent(String jarFileName, String resourceName) throws UnsupportedEncodingException{
  JarResources jr = new JarResources(jarFileName);
  byte[] buff = jr.getResource(resourceName);
  return new String(buff,"UTF-8");
 }
 
 public static void main(String[] args) throws IOException {
  String jar = "D:\\eclipse\\plugins\\com.crm.codemagic_1.0.0.jar";
  String resource = "bin/template/java/action.template";
  System.out.println(getResourceContent(jar,resource));
 }

}

  评论这张
 
阅读(300)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017