一般我们项目jar包,会使用java自带的jar程序,或者使用IDE如eclipse build.xml,或者ant打包。

有一些情况需要动态打包,如根据客户端的请求,把特有的信息或适配打包到jar中,下面是我写的读写的例子程序,没有添加异常处理和多线程,这个基本和业务相关。

代码如下:

读Jar


package test;

import java.io.FileInputStream;
import java.util.Iterator;
import java.util.jar.Attributes;
import java.util.jar.JarInputStream;
import java.util.jar.Manifest;
import java.util.zip.ZipEntry;

/**
 * 读取测试程序
 * @author pony
 * @blog http://pony.cnblogs.com
 * @date 2010-02-24
 * 存在问题:entry文件名若使用unicode会出现乱码
 */
public class JarReadTest { 
    /**
     * 写文件到jar包中
     * 例子中,读取一个文件,并将这个文件存储到jar包中的文件中
     *        同时新建一个新的文件
     * @param inputFileName
     * @param outputFileName
     * @throws Exception
     */
  public static void Readjar(String inputFileName) throws Exception {

JarInputStream in = new JarInputStream(new FileInputStream(inputFileName)) ;
    Manifest manifest = in.getManifest();
    Attributes atts=manifest.getMainAttributes();
    //输入所有的manifest信息
    Iterator ite=atts.keySet().iterator();
    while(ite.hasNext())
    {
        Object key=ite.next();
        System.out.println(key+":"+atts.getValue(key.toString()));
    }
    ZipEntry entry=null;
    while((entry=in.getNextEntry())!=null)
    {
        //输入每个文件的名称
        System.out.println(entry.getName());
        byte[] buffer = new byte[1024];
        int read;
        while((read=in.read(buffer))!=-1)
        {//输出文件内容
            System.out.println(new String(buffer));
        }
        in.closeEntry();
    }
    in.close();
  }

public static void main(String[] args) { 
    try { 
      Readjar("c:\\打包.jar"); 
    } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 
  } 
}

写jar


package test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.jar.JarEntry;
import java.util.jar.JarOutputStream;
import java.util.jar.Manifest;

/**
 * 将目标文件打包的测试程序
 * @author pony
 * @blog http://pony.cnblogs.com
 * @date 2010-02-24
 * 存在问题:entry文件名若使用unicode会出现乱码
 */
public class JarWriteTest { 
    /**
     * 写文件到jar包中
     * 例子中,读取一个文件,并将这个文件存储到jar包中的文件中
     *        同时新建一个新的文件
     * @param inputFileName
     * @param outputFileName
     * @throws Exception
     */
  public static void Writejar(String inputFileName, String outputFileName) throws Exception { 
    //Mainifest是jar包特有的说明文件,不能通过手动编写实现
    //它可以帮助你实现META-INF的目录保存了一个叫MANIFEST.MF的文件,记录版本,入口程序等信息
    Manifest manifest = new Manifest();
    manifest.getMainAttributes().putValue("Manifest-Version", "1.0");
    manifest.getMainAttributes().putValue("author", "pony");
    manifest.getMainAttributes().putValue("blog", "http://pony.cnblogs.com");
    //JarOutputStream和JarInputStream是jar包生成时特有封装stream
    File outfile=new File(outputFileName);
    JarOutputStream out = new JarOutputStream(new FileOutputStream(outfile),manifest) ;
    File f = new File(inputFileName); 
 
    /************************将输入文件读取写入jar outputstream中**********************************/
    //JarEntry 是jar包目录类
    JarEntry    entry=new JarEntry(new String("file1".getBytes(),"utf-8"));
    //将目录加入到out中
    out.putNextEntry(entry); 
    FileInputStream in = new FileInputStream(f); 
    byte[] buffer = new byte[1024]; 
    int n = in.read(buffer); 
    while (n != -1) { 
        out.write(buffer, 0, n); 
        n = in.read(buffer); 
    } 
    in.close(); 
    out.closeEntry();//关闭目录
      
      
    //再做一个文件
    JarEntry entry2=new JarEntry("文件2");
    out.putNextEntry(entry2); 
    out.write("你好啊!".getBytes());
    out.closeEntry();
    out.flush();
    //注意关闭输出文件流
    out.close(); 
  }

public static void main(String[] args) { 
    try { 
      Writejar("c:\\1.txt", "c:\\打包.jar"); 
    } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 
  } 
}

[原]动态打jar包程序,可用于手机图片音乐游戏的动态打包相关推荐

  1. gradle 修改java代码_自定义一个gradle插件动态修改jar包Class文件

    动态修改jar包中的class文件,预埋占位符字符串,在编译代码时动态植入要修改的值.记录一下整个过程及踩过的坑. 创建一个Android项目,再创建一个Android library,删掉里面所有代 ...

  2. java编写数据处理excel的可视化jar包程序

    编写数据处理excel的可视化jar包程序 采用excel的处理模版: https://github.com/Crab2died/Excel4J 涉及到的几个功能点的需求,excle数据的读取(可以获 ...

  3. 深入浅出Android动态载入jar包技术

    在实际项目中.因为某些业务频繁变更而导致频繁升级client的弊病会造成较差的用户体验,而这也恰是Web App的优势,于是便衍生了一种思路.将核心的易于变更的业务封装在jar包里然后通过网络下载下来 ...

  4. cglib动态代理jar包_代理模式详解:静态代理+JDK/CGLIB 动态代理实战

    1. 代理模式 代理模式是一种比较好的理解的设计模式.简单来说就是 我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标 ...

  5. SpringBoot2 集成xJar插件 动态解密jar包,避免源码泄露或反编译

    一.集成 1. 官方介绍地址 手动加密:https://github.com/core-lib/xjar maven插件集成:https://github.com/core-lib/xjar-mave ...

  6. java 动态卸载jar包_jar包 热加载/卸载 的初步实现

    这两天做的项目中按照客户要求需要将插件模式应用到本项目中,以达到客户可以自己动态增加相关功能的目的,然后我们就根据需求制定出接口,再由客户自己实现接口,通过项目提供的相应界面将实现的jar包上传,由服 ...

  7. java动态打jar包_java动态加载jar包

    目录结构如下. ├── main │   ├── java │   │   └── lu │   │   └── tool │   │   └── jar │   │   ├── InterfaceR ...

  8. linux上jar包无法识别本地文件格式,解决使用maven将项目打包成jar包后运行在linux系统中无法读取jar包中文件的问题...

    哈哈,之前计划的每周至少更新一个博客的计划又因为各种原因都泡汤了.看来坚持真得是一件挺让人头疼的问题,无论如何,从这周开始接下来每周一定要至少更新一个技术博客,欢迎大家监督! 好,言归正传.之前前几周 ...

  9. 【java基础知识】linux运行或停止jar包程序

    ---通过命令行直接运行 运行命令: java -jar xxxx.jar 停止: Ctrl+C  按键停止 ---通过后台运行 运行命令: nohup java -jar xxx.jar >c ...

最新文章

  1. zzuli 2269:minval
  2. Linux关于文件的权限笔记
  3. java resource放入的文件没有生成在classes中_JAVA程序员学习笔记----mybatis深入剖析...
  4. Java删除ArrayList中的重复元素的2种方法
  5. 方正电脑如何关闭网络启动计算机,方正电脑怎么进安全模式
  6. 世界著名厂家单片机简介
  7. ubuntu18.04 安装nvidia显卡驱动
  8. 麦克风声源定位原理_关于基于麦克风阵列的声源被动定位系统的设计
  9. 数据安全技术落地经验浅谈和分类分级实施
  10. Elasticsearch中keyword和numeric对性能的影响分析
  11. 2017 清北学堂 Day 6终极考试报告
  12. 2013 acm 东北四省赛 总结
  13. 读书笔记-精准努力-情绪暴躁因为假设世界是美好的
  14. 驱动开发之五 --- TDI之一(飞雪楚狂人)
  15. js 绘画js 绘画路径_绘画是一种技能,而不是才能
  16. Unable to prase template Class Error message: Index 0 out of bounds for length 0
  17. 晒一波程序员的桌面,逼格超级高!
  18. Mysql语法大全(命令行)(简洁、明了、全面)
  19. 金蝶云苍穹笔记(四)
  20. 邮箱确认html,html5+JavaScript进行邮箱地址验证

热门文章

  1. PCB布局布线基础技巧问答_“Altium杯”Altium_Designer应用技巧
  2. 每日总结-2016年3月9日
  3. 安装MongoDB(做成Windows服务)并加载C#驱动程序
  4. unix 网络编程卷2 第43页 管道:open竟然会阻塞?
  5. 前端随笔整理[5.14]
  6. URL跟Url的区别
  7. Java开发人员必备的7大技能,每一个都必不可少
  8. SmartGit破解方法
  9. /*去hover动画效果*/
  10. input文本框设置和移除默认值