废话少说,目的写的很清楚,下面看代码,主要有两个方法,一个是解析ZIP文件的,代码如下
- File file = new File(fileName);// fileName是文件URL
- ZipFile zipFile = new ZipFile(file);// 需要被解析的ZIP文件
- Enumeration<? extends ZipEntry> entries = zipFile.entries();// ZIP文件的项
- while (entries.hasMoreElements()) {// 遍历这些项
- ZipEntry nextElement = entries.nextElement();
- InputStream inputStream = zipFile.getInputStream(nextElement);
- byte[] bytes = new byte[inputStream.available()];
- inputStream.read(bytes);
- inputStream.close();// 读取其中的数据
- System.out.print("executing class");
- CallableClassLoader c = new CallableClassLoader();
- Class loadClass = c.loadClass(bytes);//加载这个类
- }
另外一段代码则是根据字节数据,加载类的,是一个TestClassLoader ,其继承于ClassLoader,自定义方法,方法如下
- package com.zip;
- public class TestClassLoader extends ClassLoader {
- @SuppressWarnings("deprecation")
- public Class loadClass(byte[] bytes) throws Exception {
- return this.defineClass(bytes, 0, bytes.length);
- }
- }