`
许真恩
  • 浏览: 39069 次
  • 来自: ...
社区版块
存档分类
最新评论

打包你需要的基本类、其他的不要

阅读更多
看了一篇瘦身文件、记录一下、http://nonconductor.bokee.com/5085956.html

源代码如下

/*
* Alipay.com Inc.
* Copyright (c) 2004-2008 All Rights Reserved.
*/
package com.beyond.web.trade;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.jar.JarOutputStream;
import java.util.zip.ZipEntry;

public class Packager {
    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        File f = new File("C:/Documents and Settings/en.xuze/hello.list");
        Packager pkger = new Packager();
        pkger.debugEnabled = true;
        List ret = pkger.parseOutput(new FileInputStream(f));
        pkger.pkgResources(ret, "C:/Documents and Settings/en.xuze/Hello.jar");
    }

    private boolean debugEnabled;

    public List parseOutput(InputStream in) throws IOException {
        ArrayList ret = new ArrayList();
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        String line = reader.readLine();
        while (line != null) {
            if (line.matches("\\[Loaded .* from .*")) {
                if (debugEnabled)
                    System.out.println("Matches:" + line);
                ret.add(line.substring(8, line.indexOf(" from ")));
            } else {
                if (debugEnabled)
                    System.out.println("UnMatches:" + line);
            }
            line = reader.readLine();
        }
        return ret;
    }

    public void pkgResources(List res, String fileName) throws IOException {
        File f = new File(fileName);
        if (!f.exists()) {
            f.createNewFile();
        }
        byte[] buf = new byte[1024];
        JarOutputStream out = new JarOutputStream(new FileOutputStream(fileName));

        for (Iterator iterator = res.iterator(); iterator.hasNext();) {
            InputStream in = null;
            try {
                String s = (String) iterator.next();
                s = s.replace('.', '/') + ".class";
                if (debugEnabled) {
                    System.out.println("adding: " + s);
                }
                in = this.getClass().getClassLoader().getResourceAsStream(s);
                out.putNextEntry(new ZipEntry(s));
                int w = in.read(buf);
                while (w >= 0) {
                    out.write(buf, 0, w);
                    w = in.read(buf);
                }
            } catch (Exception e) {
                e.printStackTrace();
                // TODO: handle exception
            } finally {
                in.close();
            }
        }
        out.finish();
        out.close();
    }
}


分享到:
评论
3 楼 senbao18 2008-04-05  
辛苦了楼主 楼主下次发代码的时候 最好讲代码放在java的编辑器里 这样会更好些
2 楼 许真恩 2008-04-05  
进来养成"看过任何文章都有所记录"的习惯、要不白看了、当然、最重要要在脑袋中过一过
1 楼 许真恩 2008-04-05  
几个知识点
1、cmd模式下可以用 > 来把程序的输出结果输出到莫个文件下、如
java -verbose > User.list

2、文章思路如下
1)把我的类允许过程中需要的所有其他类打到莫个文件hello.list中
2)解析该hello.list、找出所有的类名
3)用this.getClass().getClassLoader().getResourceAsStream(类名)把类的内容读入内存、然后写到JarOutputStream 中

知识点包括
1、this.getClass().getClassLoader().getResourceAsStream(类名)用法
2、JarOutputStream 用法

相关推荐

    delphi程序打包制作

    在本文中,我们将深入探讨Delphi程序打包的基本步骤、工具以及注意事项,以帮助你实现一个高效且用户友好的打包过程。 1. **Delphi程序的基本结构** Delphi程序通常由多个单元(Units)组成,每个单元包含特定的类...

    java如何打包成exe的执行文件

    首先,你需要确保已经编写好了一个完整的Java项目,包括必要的类、资源文件以及可能需要的外部库。在这个过程中,JDBC驱动包是关键,因为它们允许Java程序连接到数据库。确保你的项目中包含了这些JDBC驱动的jar文件...

    软件打包工具及测试包(可快速入门)

    - 尽量遵循版权规定,不要非法打包受版权保护的软件或资源。 通过以上内容,我们可以了解到Enigma Virtual Box作为一款强大的打包工具,如何帮助开发者创建便携、独立的软件,并提供了相关的测试和学习资源。在...

    几十个java游戏源代码打包,仅供学习使用。

    通过分析和理解这些源代码,你可以逐步掌握Java游戏开发的基本技巧,并且随着经验的增长,可以尝试将学到的知识应用到更复杂的游戏项目中去。同时,不要忘记实践是提升编程技能的最佳途径,尝试修改代码,加入新的...

    RDB打包解包工具.rar

    "RDB打包解包工具"是一个专为处理这类文件而设计的实用程序。这个工具的主要功能是对RDB文件进行解包和打包,以便用户可以自定义或修改其中的内容,比如在本例中,是为了修改QQ2011的透明皮肤。 首先,`System.Core...

    精选_编程实现对ini配置文件的读写_源码打包

    通过以上讲解,你应能理解如何在不同编程语言中实现ini配置文件的读写,并了解源码打包的基本概念。对于提供的`readwriteinifile_test`文件,它可能包含了测试读写ini文件功能的代码,你可以根据所使用的编程语言...

    WebView的基本详细使用

    `WebSettings`类提供了许多其他配置选项,如设置缓存策略、字体大小、用户可缩放等: ```java webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); // 使用缓存,否则加载网络 webSettings....

    安卓QQ相关相关-自己练手的QQ5.0新特性侧滑菜单基本功能可以实现。有兴趣的可以研究一下.rar

    4. **Animation**:为了使侧滑菜单的滑入滑出效果更加平滑,你需要掌握Android中的动画API,如ObjectAnimator、TranslateAnimation或属性动画系统。 5. **Fragment**:在侧滑菜单中,各个选项通常由Fragment表示,...

    2024年秋季学期《计算机视觉》课程第三次作业.zip(C++)图像特征提取与匹配、全景图像拼接

    一旦你有一个基本的功能匹配器工作,尝试一些改进并记录你的结果。 具体作业要求参见Project1.ipynb。 全景图像拼接 启动Jupyter并打开Project2.ipynb。 在本项目中,你将实现一个全景图像拼接器。这将建立在项目 1 ...

    Java语言编码规范 (Java Code Conventions)

    如果你将源码作为产品发布,就需要确任它是否被很好的打包并且清晰无误,一如你已构建的其它任何产品。 2. 文件名(File Names) 文件名是 Java 程序的基本组成部分。Java 程序使用以下文件后缀:.java(Java ...

    Java_Mod开发者工具包这是你开始的地方,如果你想开发一个新的Mod.zip

    在开发过程中,你需要学习如何利用这些工具和资源,遵循游戏引擎提供的API,创建新的游戏对象、改变游戏逻辑或添加新的功能。同时,你也需要了解游戏数据结构和工作原理,以便于更好地集成你的模组。 最后,不要...

    C#贪吃蛇小游戏基于Windows编程

    在贪吃蛇游戏中,你需要理解基本的数据类型、变量、控制结构(如循环和条件语句)、类和对象的概念。 2. **Windows Forms**:这是.NET Framework提供的一个用于构建桌面应用程序的库。在本项目中,你将创建一个...

    java入门教程

    学习Java,你需要掌握基本的数据类型,包括整型(byte, short, int, long)、浮点型(float, double)、字符型(char)和布尔型(boolean)。此外,还有引用类型,如类、接口和数组,它们都是对象的引用。 流程控制...

    参考资料-(不要)质量保修书.zip

    质量保修书这类文件可能涉及法律条款和责任规定,因此需要妥善保管,防止未经授权的访问或修改。这通常通过使用文档管理系统来实现,这些系统可以跟踪文件的版本历史,设置访问权限,并确保数据安全。 此外,对于...

    用C#制作PDF文件全攻略

    首先,你需要将`itextsharp.dll`导入到你的项目中,这样就可以调用它的类和方法来构建PDF文档。 在C#中创建PDF的第一步是创建一个PdfWriter实例,它负责将内容写入PDF文件。接着,你可以创建一个PdfDocument对象,...

    C++初级总结练习大全

    你需要学习如何定义类,创建对象,以及使用类的成员(数据成员和成员函数)。 8. **构造函数与析构函数**:构造函数用于初始化对象,析构函数则在对象生命周期结束时执行清理工作。 9. **友元**:友元函数或友元类...

    游戏图片,测试使用,不要乱动

    开发者可能需要将其他格式的图片转换为适合平台的格式。 8. **测试与调试**:在测试阶段,这些图片可能需要频繁调整和更新,确保它们在不同设备和屏幕分辨率上显示正常。开发者会使用模拟器和真机进行多设备测试,...

    linux下QT入门编程

    学习Qt编程,你需要掌握以下知识点: 1. **安装与环境配置**:在Linux系统上,你可以通过包管理器安装Qt开发工具,如Qt Creator和必要的编译器。了解如何配置Qt Creator的项目构建设置,确保编译器和运行环境正确...

    Java程序生成exe可执行文件详细教程(图文说明)

    其它如果没有必要的话,则按默认即可,点击+号添加类路径:基本上你所需要用到的 Jar 文件都要添加上去,可以逐个添加上去,也可以添加整个文件夹或者使用系统环境变量,为了使你的程序能够随处运行,所以还是强列...

    ssh80个包由于太大分成两部分,第一次上传的只有一部分,大家不要下了,下这个,多在一起

    JAR文件是Java程序常用的打包格式,它包含了一系列的类文件、资源文件以及元数据,可以作为一个单独的模块执行或供其他程序使用。 总结来说,这个压缩包包含的SSH相关文件可能涉及以下知识点: 1. SSH协议:了解其...

Global site tag (gtag.js) - Google Analytics