Java:创建和写入一个jar文件并执行
Posted 你是小KS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java:创建和写入一个jar文件并执行相关的知识,希望对你有一定的参考价值。
1. 声明
当前内容主要为学习和复习使用java方式生产一个jar并使用命令行执行
主要为使用JarOutputStream方式创建jar文件
2.基本demo
1.首先准备一个java文件(Hello.java)
public class Hello {
public static void main(String[] args) {
System.out.println("hello create my jar file");
}
}
2.找到项目编译路径并找到该Hello.class文件的位置
3.开始写代码并将这个Hello.class作为启动目标类
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.jar.Attributes;
import java.util.jar.Attributes.Name;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.JarOutputStream;
import java.util.jar.Manifest;
import java.util.zip.ZipEntry;
/**
*
* @author hy
* @createTime 2021-06-20 09:42:23
* @description 像某个jar中写入内容
*
*/
public class WriteJarTest {
public static void main(String[] args) {
// 注意jarFile主要使用来读取jar文件的,不能创建jarFile
String writeJarPath = "C:\\\\Users\\\\admin\\\\Desktop\\\\java的测试\\\\read-write-jar-test\\\\my.jar";
Manifest manifest = new Manifest();
Attributes mainAttributes = manifest.getMainAttributes();
// 配置MANIFEST.MF文件的内容
mainAttributes.put(new Name("Manifest-Version"), "1.0.0");
mainAttributes.put(new Name("Main-Class"), "com.hy.test.Hello");
String classPath = "D:\\\\eclipse-workspace\\\\JarReadAndWriteTest\\\\bin\\\\com\\\\hy\\\\test\\\\Hello.class";
File file = new File(classPath);
try (JarOutputStream jos = new JarOutputStream(new FileOutputStream(writeJarPath), manifest);
FileInputStream fis = new FileInputStream(file)) {
// 这里需要获取多个class文件,然后创建并得到各种byte
JarEntry jarEntry = new JarEntry("com/hy/test/Hello.class");
byte[] bytes = new byte[1024];
// 读取单个文件的比特到当前的byte中
int len = fis.read(bytes);
byte[] copyOfRange = Arrays.copyOfRange(bytes, 0, len);
// 放入一个com/hy/test/Hello.class(注意这里不能使用com\\\\hy\\\\test\\\\Hello.class替换,否则执行报错)
jos.putNextEntry(jarEntry);
// 开始向当前的单个实体中写入数据(当前Hello.class的比特)
jos.write(copyOfRange);
// 关闭这个jar实体,可以开启其他的jar实体
jos.closeEntry();
//jar文件写入完毕
jos.finish();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("创建一个jar文件成功");
}
}
注意:Main-Class
就是这个运行的类,其他的可以参考之前的博文
3. 创建jar和运行
查看其中的MANIFEST.MF和Hello.class发现都是正常的
执行:
执行成功!
4. 主要遇到的问题
- 发现找不到Hello.class但是打包很正常(就是
不能使用\\\\
而只能使用/
作为jar中的文件分隔符
) - 写入的时候需要
先jos.putNextEntry(jarEntry);然后在write,最后关闭这个entry(class)
以上是关于Java:创建和写入一个jar文件并执行的主要内容,如果未能解决你的问题,请参考以下文章
如何使用Java创建Excel(.xls 和 .xlsx)文件 并写入数据
使用java如何直接往word文件中写入内容最好有详细的介绍和源代码