这篇文章给大家介绍如何解压jar,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
页面上传jar包
后台解压jar包
页面展示所有package
选择一个package
页面显示class和子package
选择class,进入class解析页面
选择package,显示class和子package
package com.wuxiongwei.java.jar2;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.nio.channels.Channels;
import java.nio.channels.FileChannel;
import java.nio.channels.ReadableByteChannel;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
/**
* 非常好的工具类 <br>
* 解压jar.
* @author
* @version 1.0.0
*/
public class JarDecompression {
protected static Log log = LogFactory.getLog(JarDecompression.class);
@SuppressWarnings("resource")
public static void uncompress(File jarFile, File tarDir) throws IOException {
JarFile jfInst = new JarFile(jarFile);
Enumeration enumEntry = jfInst.entries();
while (enumEntry.hasMoreElements()) {
JarEntry jarEntry = (JarEntry) enumEntry.nextElement();
File tarFile = new File(tarDir, jarEntry.getName());
if(jarEntry.getName().contains("META-INF")){
File miFile = new File(tarDir, "META-INF");
if(!miFile.exists()){
miFile.mkdirs();
}
}
makeFile(jarEntry, tarFile);
if (jarEntry.isDirectory()) {
continue;
}
FileChannel fileChannel = new FileOutputStream(tarFile).getChannel();
InputStream ins = jfInst.getInputStream(jarEntry);
transferStream(ins, fileChannel);
}
}
/**
* 流交换操作
* @param ins 输入流
* @param channel 输出流
*/
private static void transferStream(InputStream ins, FileChannel channel) {
ByteBuffer byteBuffer = ByteBuffer.allocate(1024 * 10);
ReadableByteChannel rbcInst = Channels.newChannel(ins);
try {
while (-1 != (rbcInst.read(byteBuffer))) {
byteBuffer.flip();
channel.write(byteBuffer);
byteBuffer.clear();
}
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
if (null != rbcInst) {
try {
rbcInst.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != channel) {
try {
channel.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 打印jar文件内容信息
* @param file jar文件
*/
public static void printJarEntry(File file) {
JarFile jfInst = null;;
try {
jfInst = new JarFile(file);
} catch (IOException e) {
e.printStackTrace();
}
Enumeration enumEntry = jfInst.entries();
while (enumEntry.hasMoreElements()) {
log.info((enumEntry.nextElement()));
}
}
/**
* 创建文件
* @param jarEntry jar实体
* @param fileInst 文件实体
* @throws IOException 抛出异常
*/
public static void makeFile(JarEntry jarEntry, File fileInst) {
if (!fileInst.exists()) {
if (jarEntry.isDirectory()) {
fileInst.mkdirs();
} else {
try {
fileInst.createNewFile();
} catch (IOException e) {
log.error("创建文件失败>>>".concat(fileInst.getPath()));
}
}
}
}
public static void main(String[] args) {
File jarFile = new File("/Users/mac/Documents/other/bw2/bopsdk-openapi-1.0.2-Release.jar");
File targetDir = new File("/Users/mac/Documents/other/bw2/test/");
try {
JarDecompression.uncompress(jarFile, targetDir);
} catch (IOException e) {
e.printStackTrace();
}
}
}
关于如何解压jar就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/sunnywu/blog/3095156