JAR文件最小体积发布

import java.io.*;
import java.util.*;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.JarInputStream;
import java.util.jar.JarOutputStream;
import java.util.zip.ZipEntry;

/**
 * Created by jimyao on 2016/1/23.
 * 使用-XX:+TraceClassLoading输出程序所需要的class,定制jar文件
 */
public class Test6 {
    static BufferedReader fileIn;
    static ArrayList<String> newClassList;
    static JarInputStream jarIn;
    static JarOutputStream jarOut;
    static byte[] bytes;
    static final String rtFileName = "C://Program Files//Java//jdk1.8.0_65//jre//lib//rt.jar";

    public Test6() throws IOException {
        newClassList = new ArrayList<>();
        bytes = new byte[1024];
        jarIn = new JarInputStream(new BufferedInputStream(new FileInputStream(rtFileName)));
        jarOut = new JarOutputStream(new BufferedOutputStream(new FileOutputStream("C:\\1\\newrt.jar")));
    }

    private static void doJar(String sourceFile) throws FileNotFoundException, IOException {

        try {
            fileIn = new BufferedReader(new InputStreamReader(new FileInputStream(sourceFile)));

            String readLine = null;
            while ((readLine = fileIn.readLine()) != null) {
                String[] subLine = readLine.split(" ");
                String newClass = subLine[1];
                newClassList.add(newClass.replace(".", "/").trim());
            }
            JarEntry entry = null;
            while ((entry = jarIn.getNextJarEntry()) != null) {
                String fullName = entry.getName();
                String className = entry.getName().substring(0, fullName.lastIndexOf("."));
                if (newClassList.contains(className)) {
                    jarOut.putNextEntry(entry);

                    int len = jarIn.read(bytes);
                    while (len != -1) {
                        jarOut.write(bytes, 0, len);
                        len = jarIn.read(bytes);
                    }
                }
            }
        } finally {
            if (fileIn != null)
                fileIn.close();
            if (jarIn != null)
                jarIn.close();
            if (jarOut != null)
                jarOut.close();

        }
    }
 
  public static void main(String... args) throws IOException {
        Test6 test6 = new Test6();
        test6.doJar("C:\\1\\sourceFile.txt");
    }
}

转载于:https://my.oschina.net/jimyao/blog/610659

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值