⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 compress.java

📁 java相关的j2me,j2se的一些相关资料
💻 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 + -