一个简单的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 SDK自带的`jar`命令行工具就可以完成基本的打包操作,例如创建一个包含所有类文件的JAR文件。此外,还有许多第三方工具,如Ant、Maven、Gradle等,它们提供了更丰富的配置选项和自动化功能。 2. Ant:Apache ...
1. **Spring框架**:Spring是一个开源的Java应用框架,提供依赖注入(DI)和面向切面编程(AOP)等功能,简化了Java企业级应用的开发。它还包含了Spring MVC,一个用于构建Web应用程序的模块,支持RESTful风格的接口。 ...
Maven是一个基于Java的构建工具,专为管理项目的构建、报告和依赖关系而设计。它的核心理念是通过Project Object Model (POM)来描述项目,并利用中央仓库进行依赖管理和版本控制。 1. Maven简介 Maven 2.0.9版本与...
SSH网上商城是一个基于Java技术构建的电子商务平台,其核心组件包括Spring、Struts和Hibernate,这也就是SSH(Spring、Struts、Hibernate)框架的由来。这些jar包是项目运行所必需的,提供了数据持久化、业务逻辑...
这里,`People`类有两个属性`height`和`ear`,以及一个方法`speak`。在`A`类的`main`方法中,创建了`People`类的一个实例`zhubajie`并设置了属性值,然后调用了`speak`方法。 【图形用户界面(GUI)编程】 例子3...
##### 例子2:定义一个简单的类 - **程序代码**: ```java public class Person { float height, weight; String head, ear, mouth; void speak(String s) { System.out.println(s); } } class A { ...
3. 示例3是一个Applet(小程序)的例子,`Boy`类继承自`Applet`,并重写了`paint`方法,用以绘制图形。这展示了Java图形用户界面的基础知识。 第二章“标识符、关键字和数据类型”中: 1. 示例2_1探讨了Unicode字符...
类`A`创建了一个`people`类型的实例`zhubajie`,并设置了它的属性值,然后调用`speak`方法输出了一段话。这个例子展示了如何定义和初始化类的实例,以及如何访问和修改实例的成员变量。 例子3是一个Applet程序,`...
- 这个例子展示了如何创建一个简单的Java类并运行它。 ##### 例子2:定义类和对象 - **程序代码**: ```java public class People{ int height; String ear; void speak(String s){ System.out.println(s); ...
例子1是一个简单的"Hello World"程序,展示了Java程序的基本结构,包括类定义、主方法`main`以及使用`System.out.println`进行输出。 例子2展示了类的定义和对象的创建。类`People`有两个属性`height`和`ear`,以及...
例子2引入了类的概念,创建了一个名为 `people` 的类,包含了浮点型变量 `hight` 和 `weight`,以及字符串变量 `head`、`ear` 和 `mouth`。同时,还定义了一个名为 `speak` 的方法,用于输出指定的字符串。类 `A` 中...
【描述】提到这是一个简单的用户登录和打卡系统,意味着系统具备基本的员工身份验证和考勤管理功能。SSH框架中的Struts2负责处理用户界面与后台逻辑之间的交互,Spring则提供依赖注入和事务管理,而Hibernate则作为...
例子2更进一步,展示了如何定义一个类`people`,它有四个属性:`hight`、`weight`、`head`、`ear`和`mouth`,以及一个`speak`方法。然后创建了一个`people`类的对象`zhubajie`,并为它的属性赋值,最后调用`speak`...
`people`类包含了两个浮点型变量`hight`和`weight`,以及两个字符串`head`、`ear`和一个方法`speak`。类`A`的`main`方法创建了`people`类的对象`zhubajie`,并设置了其属性,最后调用`speak`方法输出字符串。 例子3...
FatJar是一款非常实用的Java开发工具,主要用于将项目中的所有依赖库打包成一个单一的JAR文件,使得在运行时无需额外配置类路径。这款工具是Eclipse集成开发环境的一个插件,名为"net.sf.fjep.fatjar_0.0.16",它极...
- `People` 类定义了一个简单的类,包含两个属性`height`和`ear`,以及一个`speak`方法。`A`类中展示了如何创建`People`类的对象,并通过对象调用方法和设置属性值。 2. **Applet编程**: - `Boy` 类扩展了`...