[原]动态打jar包程序,可用于手机图片音乐游戏的动态打包
一般我们项目jar包,会使用java自带的jar程序,或者使用IDE如eclipse build.xml,或者ant打包。
有一些情况需要动态打包,如根据客户端的请求,把特有的信息或适配打包到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();
}
}
}
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包程序,可用于手机图片音乐游戏的动态打包相关推荐
- gradle 修改java代码_自定义一个gradle插件动态修改jar包Class文件
动态修改jar包中的class文件,预埋占位符字符串,在编译代码时动态植入要修改的值.记录一下整个过程及踩过的坑. 创建一个Android项目,再创建一个Android library,删掉里面所有代 ...
- java编写数据处理excel的可视化jar包程序
编写数据处理excel的可视化jar包程序 采用excel的处理模版: https://github.com/Crab2died/Excel4J 涉及到的几个功能点的需求,excle数据的读取(可以获 ...
- 深入浅出Android动态载入jar包技术
在实际项目中.因为某些业务频繁变更而导致频繁升级client的弊病会造成较差的用户体验,而这也恰是Web App的优势,于是便衍生了一种思路.将核心的易于变更的业务封装在jar包里然后通过网络下载下来 ...
- cglib动态代理jar包_代理模式详解:静态代理+JDK/CGLIB 动态代理实战
1. 代理模式 代理模式是一种比较好的理解的设计模式.简单来说就是 我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标 ...
- SpringBoot2 集成xJar插件 动态解密jar包,避免源码泄露或反编译
一.集成 1. 官方介绍地址 手动加密:https://github.com/core-lib/xjar maven插件集成:https://github.com/core-lib/xjar-mave ...
- java 动态卸载jar包_jar包 热加载/卸载 的初步实现
这两天做的项目中按照客户要求需要将插件模式应用到本项目中,以达到客户可以自己动态增加相关功能的目的,然后我们就根据需求制定出接口,再由客户自己实现接口,通过项目提供的相应界面将实现的jar包上传,由服 ...
- java动态打jar包_java动态加载jar包
目录结构如下. ├── main │ ├── java │ │ └── lu │ │ └── tool │ │ └── jar │ │ ├── InterfaceR ...
- linux上jar包无法识别本地文件格式,解决使用maven将项目打包成jar包后运行在linux系统中无法读取jar包中文件的问题...
哈哈,之前计划的每周至少更新一个博客的计划又因为各种原因都泡汤了.看来坚持真得是一件挺让人头疼的问题,无论如何,从这周开始接下来每周一定要至少更新一个技术博客,欢迎大家监督! 好,言归正传.之前前几周 ...
- 【java基础知识】linux运行或停止jar包程序
---通过命令行直接运行 运行命令: java -jar xxxx.jar 停止: Ctrl+C 按键停止 ---通过后台运行 运行命令: nohup java -jar xxx.jar >c ...
最新文章
- zzuli 2269:minval
- Linux关于文件的权限笔记
- java resource放入的文件没有生成在classes中_JAVA程序员学习笔记----mybatis深入剖析...
- Java删除ArrayList中的重复元素的2种方法
- 方正电脑如何关闭网络启动计算机,方正电脑怎么进安全模式
- 世界著名厂家单片机简介
- ubuntu18.04 安装nvidia显卡驱动
- 麦克风声源定位原理_关于基于麦克风阵列的声源被动定位系统的设计
- 数据安全技术落地经验浅谈和分类分级实施
- Elasticsearch中keyword和numeric对性能的影响分析
- 2017 清北学堂 Day 6终极考试报告
- 2013 acm 东北四省赛 总结
- 读书笔记-精准努力-情绪暴躁因为假设世界是美好的
- 驱动开发之五 --- TDI之一(飞雪楚狂人)
- js 绘画js 绘画路径_绘画是一种技能,而不是才能
- Unable to prase template Class Error message: Index 0 out of bounds for length 0
- 晒一波程序员的桌面,逼格超级高!
- Mysql语法大全(命令行)(简洁、明了、全面)
- 金蝶云苍穹笔记(四)
- 邮箱确认html,html5+JavaScript进行邮箱地址验证
热门文章
- PCB布局布线基础技巧问答_“Altium杯”Altium_Designer应用技巧
- 每日总结-2016年3月9日
- 安装MongoDB(做成Windows服务)并加载C#驱动程序
- unix 网络编程卷2 第43页 管道:open竟然会阻塞?
- 前端随笔整理[5.14]
- URL跟Url的区别
- Java开发人员必备的7大技能,每一个都必不可少
- SmartGit破解方法
- /*去hover动画效果*/
- input文本框设置和移除默认值