`
Gavin.Chen
  • 浏览: 326926 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

一个简单的Ear包实用类

阅读更多

一个简单的Ear包实用类,可以进行简单的Ear包内Jar文件的插入,替换,删除,但是它只能处理一个层次的文件操作,如果是想对Ear包里面的Jar包的文件进行操作等类似需求,则此类暂不能提供此功能

 

public class EarFileUtil
{
    private String sourceEarFilePath;
    private String targetEarFilePath;

    private static final String MODE_REPLACE = "replace";
    private static final String MODE_INSERT = "insert";
    private static final String MODE_DELETE = "delete";
    
    public static void main(String[] args)
    {
//        args = new String[5];
//        args[0] = "delete";
//        args[1] = "c:/test/source.ear";
//        args[2] = "c:/test/target.ear";
//        args[3] = "c:/test/targetJar.jar";
//        args[4] = "jarInEar.sar";
        List<String> commandList = new ArrayList();
//        commandList.add("replace c:/test/target.ear c:/test/target.ear jarInEar.jar c:/test/targetJar.jar");
//        commandList.add("insert c:/test/target.ear c:/test/target2.ear jarInEar.jar c:/test/targetJar.jar");
        commandList.add("delete c:/test/target.ear c:/test/target3.ear jarInEar");

        for (String commandStr : commandList)
        {
            System.out.println("executing command '" + commandStr + "'");

            args = commandStr.split(" ");

            EarFileUtil util = new EarFileUtil();
            if (args.length < 4)
            {
                util.printUsage();
                return;
            }

            String operate = args[0];

            String sourceEarFile = args[1];
            String targetEarFile = args[2];
            util.init(sourceEarFile, targetEarFile);

            if (operate.equals(MODE_REPLACE))
            {
                if (args.length < 5)
                {
                    util.printUsage();
                }
                String filePathInEar = args[3];
                String targetFile = args[4];

                util.operate(MODE_REPLACE, filePathInEar, targetFile);
            }
            else if (operate.equals(MODE_INSERT))
            {
                if (args.length < 5)
                {
                    util.printUsage();
                }

                String filePathInEar = args[3];
                String targetFile = args[4];

                util.operate(MODE_INSERT, filePathInEar, targetFile);
            }
            else if (operate.equals(MODE_DELETE))
            {
                String filePathInEar = args[3];

                util.operate(MODE_DELETE, filePathInEar, null);
            }
            else
            {
                util.printUsage();
            }
        }
    }

    public EarFileUtil()
    {
        
    }

    public void init(String sourceEarFilePath, String targetEarFilePath)
    {
        this.sourceEarFilePath = sourceEarFilePath;
        this.targetEarFilePath = targetEarFilePath;
    }

    public void printUsage()
    {
        System.out.println("Usage:");
        System.out.println("-------------------------------");
        System.out.println("  replace sourceEarFile targetEarFile filePathInEar targetPath");
        System.out.println("  insert sourceEarFile targetEarFile filePathInEar targetPath");
        System.out.println("  delete sourceEarFile targetEarFile filePathInEar");
        System.out.println("-------------------------------");
    }

    public void operate(String mode, String filePathInEar, String targetFile)
    {
        try
        {
            //先创建目标的ear包,再New一个JarOutputStream,以备输出目标Ear包之用
            File targetEarFile = new File(this.targetEarFilePath);
            targetEarFile.createNewFile();
            FileOutputStream targetEarFileOutputStream = new FileOutputStream(targetEarFile);
            JarOutputStream newJarOutputStream = new JarOutputStream(targetEarFileOutputStream);
            byte buffer[] = new byte[100];
            int bytesRead;

            //循环读取源Ear包里除开要替换的Jar包外的其它文件,并将这些文件写到目标Ear包里去
            JarFile sourceEarFile = new JarFile(this.sourceEarFilePath);
            Enumeration sourceEarJarEnties = sourceEarFile.entries();
            while (sourceEarJarEnties.hasMoreElements())
            {
                JarEntry jarEntry = (JarEntry) sourceEarJarEnties.nextElement();

                //要替换Jar包,跳过它
                if (mode.equals(MODE_REPLACE) || mode.equals(MODE_DELETE))
                {
                    System.out.println(jarEntry.toString());
                    if (jarEntry.toString().equals(filePathInEar))
                    {
                        continue;
                    }
                }

                //其它文件马上写到目标Ear包里去
                InputStream jarInputStream = sourceEarFile.getInputStream(jarEntry);
                newJarOutputStream.putNextEntry(jarEntry);
                while ((bytesRead = jarInputStream.read(buffer)) != -1)
                {
                    newJarOutputStream.write(buffer, 0, bytesRead);
                }
                newJarOutputStream.flush();
                jarInputStream.close();
            }
            //到这里源Ear包己经没有用了,close掉
            sourceEarFile.close();

            if (mode.equals(MODE_INSERT) || mode.equals(MODE_REPLACE))
            {
                JarEntry targetJarEntry = new JarEntry(filePathInEar);
                newJarOutputStream.putNextEntry(targetJarEntry);
                FileInputStream targetJarFileInputStream = new FileInputStream(targetFile);
                while ((bytesRead = targetJarFileInputStream.read(buffer)) != -1)
                {
                    newJarOutputStream.write(buffer, 0, bytesRead);
                }
                targetJarFileInputStream.close();
            }

            newJarOutputStream.flush();
            newJarOutputStream.close();
            targetEarFileOutputStream.close();
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
    }
}

 

分享到:
评论

相关推荐

    JAVA代码打包工具

    Java SDK自带的`jar`命令行工具就可以完成基本的打包操作,例如创建一个包含所有类文件的JAR文件。此外,还有许多第三方工具,如Ant、Maven、Gradle等,它们提供了更丰富的配置选项和自动化功能。 2. Ant:Apache ...

    项目开发jar包

    1. **Spring框架**:Spring是一个开源的Java应用框架,提供依赖注入(DI)和面向切面编程(AOP)等功能,简化了Java企业级应用的开发。它还包含了Spring MVC,一个用于构建Web应用程序的模块,支持RESTful风格的接口。 ...

    maven简单实用教程

    Maven是一个基于Java的构建工具,专为管理项目的构建、报告和依赖关系而设计。它的核心理念是通过Project Object Model (POM)来描述项目,并利用中央仓库进行依赖管理和版本控制。 1. Maven简介 Maven 2.0.9版本与...

    ssh网上商城中所需要的jar包

    SSH网上商城是一个基于Java技术构建的电子商务平台,其核心组件包括Spring、Struts和Hibernate,这也就是SSH(Spring、Struts、Hibernate)框架的由来。这些jar包是项目运行所必需的,提供了数据持久化、业务逻辑...

    java2实用教程全部例题

    这里,`People`类有两个属性`height`和`ear`,以及一个方法`speak`。在`A`类的`main`方法中,创建了`People`类的一个实例`zhubajie`并设置了属性值,然后调用了`speak`方法。 【图形用户界面(GUI)编程】 例子3...

    java2实用教程(第2版)程序代码.pdf

    ##### 例子2:定义一个简单的类 - **程序代码**: ```java public class Person { float height, weight; String head, ear, mouth; void speak(String s) { System.out.println(s); } } class A { ...

    java2实用教程(第3版)例子代码.doc

    3. 示例3是一个Applet(小程序)的例子,`Boy`类继承自`Applet`,并重写了`paint`方法,用以绘制图形。这展示了Java图形用户界面的基础知识。 第二章“标识符、关键字和数据类型”中: 1. 示例2_1探讨了Unicode字符...

    java2实用教程(第2版)程序代码.doc

    类`A`创建了一个`people`类型的实例`zhubajie`,并设置了它的属性值,然后调用`speak`方法输出了一段话。这个例子展示了如何定义和初始化类的实例,以及如何访问和修改实例的成员变量。 例子3是一个Applet程序,`...

    java2实用教程(第3版例子代码).doc

    - 这个例子展示了如何创建一个简单的Java类并运行它。 ##### 例子2:定义类和对象 - **程序代码**: ```java public class People{ int height; String ear; void speak(String s){ System.out.println(s); ...

    java2实用教程(第3版例子代码)

    例子1是一个简单的"Hello World"程序,展示了Java程序的基本结构,包括类定义、主方法`main`以及使用`System.out.println`进行输出。 例子2展示了类的定义和对象的创建。类`People`有两个属性`height`和`ear`,以及...

    Java2实用教程(第2版)程序代码

    例子2引入了类的概念,创建了一个名为 `people` 的类,包含了浮点型变量 `hight` 和 `weight`,以及字符串变量 `head`、`ear` 和 `mouth`。同时,还定义了一个名为 `speak` 的方法,用于输出指定的字符串。类 `A` 中...

    HRSystem_Eclipse.rar_ssh eclipse_ssh mysql eclipse_ssh mysql jav

    【描述】提到这是一个简单的用户登录和打卡系统,意味着系统具备基本的员工身份验证和考勤管理功能。SSH框架中的Struts2负责处理用户界面与后台逻辑之间的交互,Spring则提供依赖注入和事务管理,而Hibernate则作为...

    JAVA\java2实用教程(第2版)程序代码.doc

    例子2更进一步,展示了如何定义一个类`people`,它有四个属性:`hight`、`weight`、`head`、`ear`和`mouth`,以及一个`speak`方法。然后创建了一个`people`类的对象`zhubajie`,并为它的属性赋值,最后调用`speak`...

    java2实用教程(第2版)程序代码

    `people`类包含了两个浮点型变量`hight`和`weight`,以及两个字符串`head`、`ear`和一个方法`speak`。类`A`的`main`方法创建了`people`类的对象`zhubajie`,并设置了其属性,最后调用`speak`方法输出字符串。 例子3...

    fatjar插件net·sf·fjep·fatjar0·0·16.zip

    FatJar是一款非常实用的Java开发工具,主要用于将项目中的所有依赖库打包成一个单一的JAR文件,使得在运行时无需额外配置类路径。这款工具是Eclipse集成开发环境的一个插件,名为"net.sf.fjep.fatjar_0.0.16",它极...

    java2使用教程第三版代码电子版

    - `People` 类定义了一个简单的类,包含两个属性`height`和`ear`,以及一个`speak`方法。`A`类中展示了如何创建`People`类的对象,并通过对象调用方法和设置属性值。 2. **Applet编程**: - `Boy` 类扩展了`...

Global site tag (gtag.js) - Google Analytics