[原]动态打jar包程序,可用于手机图片音乐游戏的动态打包
一般我们项目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包目录类
JarEntryentry
=
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包程序,可用于手机图片音乐游戏的动态打包】
推荐阅读
- 9班|9班 刘志雪
- 遇到一哭二闹三打滚的孩子,怎么办┃山伯教育
- Ⅴ爱阅读,亲子互动——打卡第178天
- 我错了,余生不再打扰
- 赵原野传|赵原野传 孤独
- 做一件事情的基本原理是什么()
- 2018-3-24
- 日志打卡
- 以读攻“毒”唤新活动曹彦斌打卡第二天
- gitlab|gitlab 通过备份还原 admin/runner 500 Internal Server Error