📄 compress.java
字号:
import java.io.*;
import java.util.*;
import java.util.jar.*;
public class Compress {
public Compress() {}
public static byte[] getZIPByte(Manifest manifest,HashMap<String,byte[]> files){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
JarOutputStream jarOutputStream = new JarOutputStream(baos,manifest);
JarEntry jarEntry;
for(String fileName : files.keySet()){
jarEntry=new JarEntry(fileName);
jarEntry.setSize(files.get(fileName).length); //写字节长度
jarEntry.setTime(System.currentTimeMillis());
jarOutputStream.putNextEntry(jarEntry);
jarOutputStream.write(files.get(fileName)); //写内容
}
jarOutputStream.close();
}catch(IOException ioe){
ioe.printStackTrace();
}
return baos.toByteArray();
}
public static void main(String args[]){
try {
////////////将class文件和MANIFEST.MF文件打包成jar文件,并且改写MANIFEST.MF文件的内容.
File mf=new File("c:\\src\\MANIFEST.MF"); //此文件必须存在,并且要有数据.
FileInputStream mfInput=new FileInputStream(mf);
Manifest m = new Manifest(mfInput); //从指定的输入流构造新的Manifest
Attributes attr=m.getMainAttributes(); //返回 Manifest 的主 Attributes
attr.putValue("comment","打包测试"); //添加一个属性.
////////////
ByteArrayOutputStream baos = new ByteArrayOutputStream();
JarOutputStream jarOutputStream = new JarOutputStream(baos,m); //使用指定的Manifest创建新的JarOutputStream
////////////写入第一个实体类
JarEntry jarEntry=new JarEntry("Class1.class"); //创建一个新的实体类
File f=new File("c:\\src\\Class1.class");
FileInputStream fin=new FileInputStream(f);
byte b[]=new byte[(int)f.length()]; //通过文件大小设置新的字节数组
fin.read(b); //将流数据写入字节数组.
jarEntry.setSize(b.length); //设置条目数据的未压缩大小,及文件大小
jarEntry.setTime(System.currentTimeMillis());//设置条目的修改时间
jarOutputStream.putNextEntry(jarEntry); //开始写入新的 JAR 文件条目,并将流定位到条目数据的开始处
jarOutputStream.write(b); //写入JAR 文件条目对应的数据,及文件的字节数据.
////////////写入第二个实体类
jarEntry=new JarEntry("test\\Class2.class");
f=new File("c:\\src\\test\\Class2.class");
fin=new FileInputStream(f);
b=new byte[(int)f.length()];
fin.read(b);
jarEntry.setSize(b.length);
jarEntry.setTime(System.currentTimeMillis());
jarOutputStream.putNextEntry(jarEntry);
jarOutputStream.write(b);
jarOutputStream.flush(); //刷新此输出流并强制写出所有缓冲的输出字节
jarOutputStream.close(); //
/////////////将jar文件流写入到jar文件中
File fo=new File("c:\\test.jar");
FileOutputStream fout=new FileOutputStream(fo);
fout.write(baos.toByteArray()); //将jar文件字节流写入到test.jar文件中
fout.close();
fin.close();
}catch(IOException ioe){
ioe.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -